/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
Findes element? [VB6]
Fra : Jens Vestergaard


Dato : 23-05-01 21:09

Hejsa!
Hvordan afslører jeg nemmest, om et bestemt element findes i en Collection?

Eksempel:

En Collection af Personer, hvor hvert element har en Key, som er personens
navn.

Hvis jeg skriver
n = Personer("Peter").Alder
og Peter ikke findes i Collection'en, giver det en fejl.

Kan man *inden da*... uden at skulle løbe hele Collection'en igennem ...
afsløre, om "Peter" er et gyldigt element?

--
mvh
Jens Vestergaard
www.railsoft.dk




 
 
Tomas Christiansen (23-05-2001)
Kommentar
Fra : Tomas Christiansen


Dato : 23-05-01 23:03

Jens Vestergaard skrev:
> Hvordan afslører jeg nemmest, om et bestemt element findes i en
Collection?

Microsoft har været så geniale at medlevere et Collection-objekt, som NÆSTEN
kan det, som man ofte har brug for.
Desuden har de været så geniale at medlevere et Dictionary-objekt, kan EN
DEL af det som Collection mangler, men som så til gengæld ikke kan alt det,
som Collection kan.

Med andre ord: Hvis Collection eller Dictonary ikke dækker ens behov, må man
købe et produkt som kan løse problemet, selv kode et nyt objekt (f.eks.
"Collictionary") eller leve med det, og løse problemet ad et par omveje.

Du kan f.eks. bruge denne funktion til at checke medlemsskab i et
Collection-objekt:

Function ExistInCol(ByVal Index As Variant, ByVal Col As Collection) As
Boolean
On Error Resume Next
ExistInCol = VarType(Col.Item(Index)) Or True
End Function

Jeg må med det samme sige, at dette er IKKE pæn kode, og skal derfor
behandles med "varsomhed"!!!

Det hele går ud på at en boolsk funktion pr. default har returværdien falsk,
men hvis opslaget Col.Item(Index) går godt, og det gør det kun hvis Index
findes i Col, sættes funktionsværdien til sand.

Funktionen VarType tjener kun formålet at sikre at returværdien fra
Col.Item(Index) ikke vil forårsage en fejl i det logiske udtryk (f.eks.
giver udstrykket ("a" Or True) ingen mening).

-------
Tomas



preben nielsen (24-05-2001)
Kommentar
Fra : preben nielsen


Dato : 24-05-01 06:29


"Jens Vestergaard" <j@railsoft.dk> skrev i en meddelelse
news:9eh5ck$css$1@news.inet.tele.dk...
> Hejsa!
> Hvordan afslører jeg nemmest, om et bestemt element findes i en
Collection?
>
> Eksempel:
>
> En Collection af Personer, hvor hvert element har en Key, som
er personens
> navn.
>
> Hvis jeg skriver
> n = Personer("Peter").Alder
> og Peter ikke findes i Collection'en, giver det en fejl.

Problemet er jo, at du du beder om en attribut (Alder) uden at
vide, om du har et object. Sølvfølgelig giver det fejl.

( !! UTESTET !!)
Dim P as Object ' F.eks....

Set P = Personer("Peter")

If Not P is Nothing Then
n = P.Alder
End If

--

/\ preben nielsen
\/\ prel@post.tele.dk



Jens Vestergaard (24-05-2001)
Kommentar
Fra : Jens Vestergaard


Dato : 24-05-01 07:34

"preben nielsen" <prel@post.tele.dk> skrev i en meddelelse
news:9ei65e$pdc$1@news.inet.tele.dk...
>
> "Jens Vestergaard" <j@railsoft.dk> skrev i en meddelelse
> news:9eh5ck$css$1@news.inet.tele.dk...
> > Hejsa!
> > Hvordan afslører jeg nemmest, om et bestemt element findes i en
> Collection?
[snip]
>
> Problemet er jo, at du du beder om en attribut (Alder) uden at
> vide, om du har et object. Sølvfølgelig giver det fejl.

Ja - jeg ved godt hvor problemet er, og jeg kan også godt løse det, sådan
som du foreslår herunder. Det har jeg allerede gjort, men i det aktuelle
tilfælde kræver det rigtig mange kald af den funktion. Og så var det, jeg
håbede, at der fandtes et egentlig indbygget tjek, som jeg måske havde
overset.

Men thanks anyway

JV

>
> ( !! UTESTET !!)
> Dim P as Object ' F.eks....
>
> Set P = Personer("Peter")
>
> If Not P is Nothing Then
> n = P.Alder
> End If
>
> --
>
> /\ preben nielsen
> \/\ prel@post.tele.dk
>
>



Tomas Christiansen (24-05-2001)
Kommentar
Fra : Tomas Christiansen


Dato : 24-05-01 23:03

preben nielsen skrev:
> Problemet er jo, at du du beder om en attribut (Alder) uden at
> vide, om du har et object. Sølvfølgelig giver det fejl.

Problemet er at et forsøg på at hente noget (ved brug af indeks-nummer eller
nøgleværdi) fra en Collection som ikke findes resulterer i en fejl.

Hvis denne fejl IKKE optrådte, ville der rigtig nok herefter komme en ANDEN
fejl, idet det ikke er muligt at spørge på værdien af Alder attibuttet uden
have et objekt.

Jeg ville nok pakke koden ind i en funktion, f.eks:

Const UBESTEMT_ALDER As Integer = -1
...
Function GetAlder(ByVal Navn As String, _
ByVal Col As Collection) As Integer
On Error Resume Next
GetAlder = UBESTEMT_ALDER
GetAlder = Col.Item(Navn).Alder
End Function
...
MsgBox GetAlder("Peter")
-------
Tomas



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408893
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste