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.
Synes godt om
Nybegynder
27. maj 2003 - 05:46#5
Fedt nok kan du uddybe det lidt nemer med nogle koder.
Ja, men send mig lige din class collection, så jeg arbejder med samme navne, som du bruger i din kode.
Synes godt om
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)
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
Synes godt om
Nybegynder
31. maj 2003 - 08:10#9
objNewMember.Parent = Me jeg får en fejl på denne linje.
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
Synes godt om
Nybegynder
31. maj 2003 - 23:53#11
Mange tak olet det virker fint nu. Lars
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.