22. juli 2003 - 18:08Der er
1 kommentar og 1 løsning
collection driver mig til vanvid
nu er jeg ved at være godt træt af det. Jeg har oprettet en class, og en collection baseret på denne class. Det hele oprettet i class-builderen. MEN JEG KAN IKKE FINDE UD AF AT TILFØJE NOGET TIL DEN COLLECTION??? add har jeg prøvet at bruge på 1000 forskellige måde...Der må være noget jeg har fuldstændig misforstået. Er der nogle der vil være venlige at vise mig et eksempel hvor de opretter en collection, en class og vigtigst af alt hvordan man tilføjer noget til den collection. På forhånd tak.
Først en klasse: (Limit) ############## Option Explicit
Private mstrName As String 'Navnet på reglen Private mudtAction As Action 'Hvad der skal ske hvis reglen bliver brudt
Public Property Let Name(strName As String) mstrName = strName End Property Public Property Get Name() As String Name = mstrName End Property
Public Property Let Action(udtAction As Action) mudtAction = udtAction End Property Public Property Get Action() As Action Action = mudtAction End Property ########################
Så en samling af "limits" (LimitCollection) ################ Option Explicit
Private colLimits As Collection
'DEFAULT FUNCTION Public Function Item(ByVal Index As Variant) As clsLimit Set Item = colLimits.Item(Index) End Function
' NewEnum must return the IUnknown interface of a collection's enumerator. ' Gør det muligt at bruge For Each … Next på samlingen ' Funktionen er "usynlig" Public Function NewEnum() As IUnknown Set NewEnum = colLimits.[_NewEnum] End Function
'Tilføjer en ny menu til samlingen og retunere det indsatte "Menu" objekt Public Function Add(strName As String) As clsLimit On Error GoTo handle
Dim objLimit As New clsLimit
'Tilføjer Limit til samlingen colLimits.Add objLimit, strName 'Sætter Limit's navn objLimit.Name = strName 'retunere "Limit" objektet Set Add = objLimit
Exit Function
handle: If Err.Number = 457 Then 'Der findes allerede en Limit med det navn Set Add = Nothing End If End Function
'Fjerne en "Limit" fra samlingen Public Function Remove(strName As String) As Boolean colLimits.Remove strName End Function
'Retunere antal limits i samlingen Public Function Count() As Integer Count = colLimits.Count End Function
Public Function Exists(strName As String) As Boolean Dim objLimit As New clsLimit Dim blnResult As Boolean
blnResult = False
For Each objLimit In colLimits If objLimit.Name = strName Then blnResult = True Exit For End If Next objLimit
Exists = blnResult End Function
Public Sub Clear() Class_Initialize End Sub
Private Sub Class_Initialize() Set colLimits = New Collection End Sub
Private Sub Class_Terminate() Set colLimits = Nothing End Sub
##################### Og så en test metode Private Sub Test() Dim colLimit As LimitCollection Dim objLimit As Limit
Set objLimit = colLimit.Add("Thu shall not steal") End Sub
For at Item og NewEnum funktionerne virker skal man sætte det op i Visual Basic (det kan ikke gøre i koden)
Gå ind i din Collection klasse og tryk "Tools" så "Procedure attributes", i "Name" vælger du "Item" og trykker på "Advanced" i "Procedure ID" vælger du så "(Default)". Så vælger "NewEnum" i "Name" og skriver -4 i "Procedure ID" og sæt så hak i "Hide this member", til sidst trykker du "OK" også skulle det virke
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.