Avatar billede Nybegynder
20. maj 2003 - 11:45 Der er 10 kommentarer og
1 løsning

class behanling

Jeg har en Collection af classer og jeg vil gerne kunne lukke den class ned inden fra den selv hvis det er muligt.
Avatar billede jrl0469 Nybegynder
20. maj 2003 - 11:57 #1
Prøv dette, erstat klassen med din klasse
Private Sub Class_Terminate()
  Set Klassen = Nothing
End Sub
Avatar billede kedde65 Praktikant
21. maj 2003 - 22:13 #2
Kan du ikke lige prøve at uddybe dit spørgsmål lidt? Jeg er ikke helt med på hvad du egentlig vil.

VH CK
Avatar billede Nybegynder
23. maj 2003 - 00:18 #3
Jeg har en collection af clsuser som bruger en anden class og når den lukker ned så vil jeg havde at clsuser bliver slette i collectione.
Avatar billede olet Nybegynder
26. maj 2003 - 19:49 #4
Lav din collection med public scope og brug clsuser's terminate event til at fjerne sig selv fra den nu tilgængelige collection. Du kan bruge en class scope variabel til at indeksere din collection med, så klassen kan finde (og fjerne) sin egen instance.
Avatar billede Nybegynder
27. maj 2003 - 05:46 #5
Fedt nok kan du uddybe det lidt nemer med nogle koder.
Avatar billede olet Nybegynder
27. maj 2003 - 09:42 #6
Ja, men send mig lige din class collection, så jeg arbejder med samme navne, som du bruger i din kode.
Avatar billede Nybegynder
27. maj 2003 - 11:17 #7
clsuser classen
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)

Private mvarUserName As String
Private mvarUserIP As String
Private mvarUserHost As String
Private mvarCommando As Byte
Private mvarUserPassWord As String
Private WithEvents Server As CSocket
Private mvarIsLogOn As Boolean

Public Property Let IsLogOn(ByVal vData As Boolean)
  mvarIsLogOn = vData
End Property

Public Property Get IsLogOn() As Boolean
  IsLogOn = mvarIsLogOn
End Property

Public Property Let Socket(ByVal requestID As Long)
  Call Server_OnConnectionRequest(requestID)
End Property

Public Property Let UserPassWord(ByVal vData As String)
  mvarUserPassWord = vData
End Property

Public Property Get UserPassWord() As String
  UserPassWord = mvarUserPassWord
End Property

Public Property Let Commando(ByVal vData As Byte)
  mvarCommando = vData
End Property

Public Property Get Commando() As Byte
  Commando = mvarCommando
End Property

Public Property Let UserHost(ByVal vData As String)
  mvarUserHost = vData
End Property

Public Property Get UserHost() As String
  UserHost = mvarUserHost
End Property

Public Property Let UserIP(ByVal vData As String)
  mvarUserIP = vData
End Property

Public Property Get UserIP() As String
  UserIP = mvarUserIP
End Property

Public Property Let UserName(ByVal vData As String)
  mvarUserName = vData
End Property

Public Property Get UserName() As String
  UserName = mvarUserName
End Property

Private Sub Class_Initialize()
  Set Server = New CSocket
  Server.LocalPort = Port
  IsLogOn = False
End Sub

Private Sub Class_Terminate()
  Set Server = Nothing
End Sub

Private Sub Server_OnClose()
  Server.CloseSocket
End Sub

Private Sub Server_OnConnectionRequest(ByVal requestID As Long)
  Server.Accept requestID
End Sub

Private Sub Server_OnDataArrival(ByVal bytesTotal As Long)
 
  Dim bData() As Byte
 
  Server.GetData bData(), vbArray + vbByte
  Call Command(bData)

End Sub
Private Function Command(bData() As Byte) As Boolean
 
  Dim strData As String
  Dim BrugerNavn As String
  Dim PassWord As String
 
  Select Case bData(0)
    Case 0 ' Login
      strData = String(UBound(bData) + 1, 0)
      Call CopyMemory(ByVal strData, bData(0), (UBound(bData) + 1) - 0)
      BrugerNavn = Split(strData, Chr(0))(1)
      PassWord = Split(strData, Chr(0))(2)
      UserName = BrugerNavn
      UserPassWord = PassWord
      IsLogOn = True
      'Check Brugernavn og Password
    Case 1
      If IsLogOn Then
        'din kode her
      Else
        'Server.CloseSocket
      End If
    Case Else
      strData = String(UBound(bData) + 1, 0)
      Call CopyMemory(ByVal strData, bData(0), (UBound(bData) + 1) - 0)
  End Select

End Function


col
Option Explicit

Private mCol As Collection

Public Function Add(objNewMember As clsUserCommando)
  mCol.Add objNewMember
End Function

Public Property Get Item(vntIndexKey As Variant) As clsUserCommando
  Set Item = mCol(vntIndexKey)
End Property

Public Property Get Count() As Long
    Count = mCol.Count
End Property

Public Sub Remove(vntIndexKey As Variant)
    mCol.Remove vntIndexKey
End Sub

Public Property Get NewEnum() As IUnknown
    Set NewEnum = mCol.[_NewEnum]
End Property

Private Sub Class_Initialize()
    Set mCol = New Collection
End Sub

Private Sub Class_Terminate()
    Set mCol = Nothing
End Sub
Avatar billede olet Nybegynder
27. maj 2003 - 13:40 #8
Jeg har ikke prøvet det endnu, jeg vil overlade fornøjelsen til dig. Du skal gøre flg.:

1) i clsUser, lav en ny property "Parent" af typen long
2) når funktionen Add i col kaldes, udfør "objNewMember.Parent = Me"
3) lave definitionen af mCol til "Public mCol As Collection" isf. Private
4) i clsUser Terminate event, loop igennem den nu synlige mCol collection i clsUser instansens forælderobjekt (der kan med denne løsning være flere forekomster af "col" der hver har en collection af clsUser instanser). Brug denne kode:

For i=0 to Parent.mCol.Count-1
  If Parent.mCol(i) = Me then
    Parent.Remove(i)
    Exit For
  End If
Next
Avatar billede Nybegynder
31. maj 2003 - 08:10 #9
objNewMember.Parent = Me jeg får en fejl på denne linje.
Avatar billede olet Nybegynder
31. maj 2003 - 10:07 #10
Det skal være "Set objNewMember.Parent = Me"

Property Parent i clsUser skal være af typen Object og du skal også bruge Set når du tilskriver din lokale variabel værdien af Parent, fx

Public Property Let Parent(newParent As Object)
  Set mParent = newParent
End Property
Avatar billede Nybegynder
31. maj 2003 - 23:53 #11
Mange tak olet det virker fint nu. Lars
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester







Læses lige nu