2010-12-08 7 views
0

Okay, vielleicht sehe ich dieses Problem falsch an und wenn ich es bin bitte sag es mir aber hier geht es.Initiiere X Betrag von A Variable

Ich habe eine Klasse können wir es newcycles.vb nennen und diese Klasse hat mehrere Ereignisse.

Als ich in meinem Programm namens sagen, dass ich so etwas wie dim cyc1 als newcycles

ich mehrere Eventhandler eingerichtet, um die Ereignisse in der Klasse im Programm zu behandeln.

Aber ich muss in der Lage sein, dynamisch so viele Instanzen der Klasse zu erstellen, wie ich je nach Benutzer brauche. Der einzige Weg, an den ich denken konnte, war das Kopieren und Einfügen der einzelnen Deklarationen und Ereignisbehandlungsroutinen x mal. Das scheint ridicoulous und durch Kopieren und Einfügen I wie

bedeuten

Dim cy1 als newcycles dim cy2 als newcycles dim CYC3 als newcycles etc etc dann das Ereignis behandelt Öffentliches Ereignis bla cy1.bla Öffentliches Ereignis bla2 Griffe Griffe cy2.bla

Gibt es einen besseren Weg, dies zu tun? Oh, und ich mache das in vb.net.

Antwort

0

Sie können eine generische Liste und eine Schleife verwenden, um alle Einweihungen Ihre Klasse für jede

Dim NoOfUsers As Integer = 10 
Dim ClassList As List(Of newcycles) = New List(Of newcycles)(NoOfUsers) 

For I As Integer = 1 To NoOfUsers 
    Dim c As newcycles = New newcycles() 
    c.ObjectIndex = I 'Property for storing the Object Index 
    AddHandler c.bla, AddressOf bla 
    ClassList.Add(c) 
Next 

    ' The event handler 
Private Sub bla(ByVal sender As Object, ByVal e As EventArgs) 
    Dim c As newcycles = CType(sender, newcycles) 
    'Do something with c.ObjectIndex which identifies this object in particular 
End Sub 

Und statt Erstellen mehrerer Event-Handler zu speichern Objekt, das Sie Ereignisse aller Objekte in einem einzigen Event-Handler behandeln konnte. Um ein Objekt von einem anderen zu unterscheiden, könnten Sie die eindeutige Objekt-ID einiger Objekte verwenden.

+0

Ich verstehe, wie Sie das Ereignis jetzt hinzufügen, aber ich kann nicht herausfinden, wie zu sagen, welche Instanz des Objekts das Ereignis ausgelöst hat. Wie hast du das gemacht? –

+0

@ Jeff-Yeager: Ich habe meinen Beispielcode aktualisiert, um zu erklären, was ich meinte –

+0

Danke! Ich schätze es sehr. Jetzt, wenn ich nur verstehe, wie es funktioniert, haha! –

0

Unter der Annahme, dass das gleiche Verfahren alle Ereignisse behandelt, können Sie Folgendes tun. Erklären Sie das Ereignis in newcycles, dann tun so etwas wie dieses ...

Dim lstCycles As New List(of newcycles) 
For X = 0 to 10 
    lstCycles.Add(New newcycle) 
    AddHandler lstCycles(X).YourEvent, AddressOf SubThatHandlesThisEvent 
Next 

Dann Zugang ...

For Each objCycle as newcycles In lstCycles 

    objCycle.SomeBooleanProperty = True 

Next 
+0

Lets sagt dort ein Ereignis, das ausgelöst wird, wenn etwas empfangen wird und das traditionelle ich es nannte –

+0

Private Sub OnMessage (ByVal Absender als Objekt, ByVal Buddy als String, ByVal Nachricht als String) behandelt newcycles.message 'Do Something End Sub Wie deklariere ich dieses Ereignis in Ihrer Lösung während der Initialisierung –

+0

verpasste ich das herausgefunden, aber ich habe ein Problem. Wenn dies eine dll im using ist und ich den Quellcode nicht ändern kann, wie kann ich feststellen, für welche Instanz der Klasse das Ereignis ausgelöst wurde? –

0

Wie über eine Sammlung von NewCycle Erstellen von Objekten, an die Sie dynamisch hinzufügen neue Elemente, ändern Sie die vorhandenen Elemente und entfernen Sie alle vorhandenen Elemente aus dem Code, während Ihre Anwendung ausgeführt wird? Sie können dies einfach mit einem implementieren. einfach ändern Sie Ihre Variablendeklaration:

Public cycles As List(Of NewCycle) 

Die documentation für die List(Of T) Klasse enthält ein ziemlich umfassendes Beispiel dafür, wie diese Sammlung zu verwenden, und listet die Methoden werden Sie brauchen, um zu verwenden, um die Objekte zu manipulieren Die Liste.

Wenn Sie in der Klasse für jedes der Elemente Ereignisse behandeln, können Sie Ihre eigene Sammlung betrachten das Erstellen und Überschreiben die Add und Remove Methoden dynamically add and remove event handlers für die von diesem Objekt ausgelösten Ereignisse. Mit anderen Worten, jedes Mal, wenn ein Element zu Ihrer Zyklusauflistung hinzugefügt wird, können Sie einen Ereignishandler für seine bla Methode mit AddHandler hinzufügen, und jedes Mal, wenn ein Element entfernt wird, können Sie den Ereignishandler für seine bla Methode mit RemoveHandler entfernen. Alle Ereignisse der Objekte können durch eine einzige Ereignisbehandlungsmethode behandelt werden, anstatt eine für jedes Objekt zu haben.Weitere Informationen dazu finden Sie in den Antworten auf this question.

Verwandte Themen