2012-04-25 34 views
5

Mam formularz w VB.NET, który jest używany jako dialog w mainform. Jego instancje są zawsze zdefiniowane lokalnie, nie ma dla niego pola. Kiedy użytkownik kliknie przycisk OK w oknie dialogowym, uruchomi zdarzenie z dokładnie jednym argumentem, instancją jednej z moich klas.Jak dodać obsługę zdarzeń do zmiennej lokalnej w VB.NET

Ponieważ jest to zawsze zmienna lokalna, jak mogę dodać procedurę obsługi zdarzeń dla tego zdarzenia? Rozglądałem się za siebie i znaleźć coś, ale naprawdę nie mogę zrozumieć to ...

kod dla zdarzenia, pole w MyDialog:

public Event ObjectCreated(ByRef newMyObject as MyObject) 

kod do głównego formularza, aby wywołać okno : (nieważne składni)

Dim dialog As New MyDialog() 
dialog.ShowDialog(Me) 
AddHandler ObjectCreated, (what do I put here?) //Or how do I add a handler? 

Jak widać utknąłem na tym, jak dodać obsługę do mojego wydarzenia. Czy ktoś może mi pomóc? Najlepiej zrobić to najlepiej ...

Odpowiedz

6

Zaleca się, dla zachowania spójności, używanie tego samego modelu źródła i zdarzenia jak wszystkie programy obsługi zdarzeń systemowych.

Stwórz własną klasa dziedziczy z EventArgs, jak:

Public Class MyObjectEventArgs 
    Inherits EventArgs 

    Public Property EventObject As MyObject 

End Class 

Następnie zadeklarować wydarzenia oraz sposób obsługi, jak:

Public Event ObjectCreated As EventHandler(Of MyObjectEventArgs) 

Private Sub Container_ObjectCreated(ByVal sender As Object, ByVal e As MyObjectEventArgs) 
    ' Handler code here 
End Sub 

Następnie dołączyć obsługi do zdarzenia używając:

AddHandler ObjectCreated, AddressOf Container_ObjectCreated 

Dodatkowo możesz użyć Handles, aby dołączyć do ev ent podniesiony z formularza głównego (przyjmując imię MainForm), jak poniżej:

Private Sub MainForm_ObjectCreated(ByVal sender As Object, ByVal e As MyObjectEventArgs) Handles MainForm.ObjectCreated 
    ' Handler code here 
End Sub 
+0

kryształowo, dzięki. – MarioDS

+0

@MarioDeSchaepmeester Myślałem, że twoje pytanie zawiera "Najlepiej z najlepszym sposobem zrobienia tego ...". Dlaczego miałbyś odznaczać moją odpowiedź? –

+0

Cóż, od razu zdałem sobie sprawę, że tak, znów zaakceptowałem twoją, przepraszam za zamieszanie. – MarioDS

1

Musisz napisać podprogram, który faktycznie wykonuje, gdy zdarzenie jest generowane:

public Sub OnObjectCreated(ByRef newMyObject as MyObject) 
    ... 
End Sub 

Wtedy obsługi dodaje :

AddHandler ObjectCreated, AddressOf OnObjectCreated 

Na marginesie ByRef nic tu nie robi. Wszystkie obiekty w VB są przekazywane przez odniesienie. Tylko zmienne primitave (string, int, etc) domyślnie używają ByVal i można je ustawić na ByRef

+0

Wow, to o wiele prostsze ... Wszystko, czego mi brakowało, to słowo kluczowe AdressOf! – MarioDS

Powiązane problemy