2012-04-25 19 views
5

VB.NET'te bir ana formda iletişim kutusu olarak kullanılan bir formum var. Örnekleri her zaman yerel olarak tanımlanmış, bunun için bir alan yok. Kullanıcı diyalogdaki OK tuşuna bastığında, tam olarak bir argümanla, sınıflarımdan birinin örneğiyle bir olayı tetikler.VB.NET'te yerel değişkene olay işleyicisi nasıl eklenir

Her zaman yerel bir değişken olduğundan, o etkinlik için bir olay işleyicisini nasıl ekleyebilirim? Ben MyDialog olay, bir tarla için ...

Kod kendim için aradı ve bir şey buldum ama gerçekten onu anlamaya olamaz ettik:

public Event ObjectCreated(ByRef newMyObject as MyObject) 

Kod iletişim çağırmak ana form için : Eğer benim olay için bir işleyici ekleme hakkında şaşırıp görebileceğiniz gibi

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

(sözdizimi aldırma). Biri bana yardım edebilir mi? Tercihi için en iyi yolla ...

cevap

6

Bu, tutarlılık açısından, tüm sistem olay işleyicileri olarak aynı kaynak ve olay args modelini kullanmanız önerilir.

Kendi sınıf olarak, EventArgs'dan devralan oluşturun: Sonra olay beyan

Public Class MyObjectEventArgs 
    Inherits EventArgs 

    Public Property EventObject As MyObject 

End Class 

ve bir işleyici yöntemi gibi:

Public Event ObjectCreated As EventHandler(Of MyObjectEventArgs) 

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

Sonra kullanarak olaya işleyicisi ekleyin:

AddHandler ObjectCreated, AddressOf Container_ObjectCreated 

Ayrıca, EV eklemek Handles kullanabilirsiniz ana formdan kaldırdı ent olarak aşağıda, (isim MainForm varsayarak):

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

Sonra işleyicisi eklenir:

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

kristal netliğine ayarlanabilir. – MarioDS

+0

@MarioDeSchaepmeester Sorunuzun "Tercihi yapmanın en iyi yolu ..." şeklinde olduğunu düşündüm. Cevabımı neden işaretlemesin? –

+0

Peki, fark ettim ki, bu yüzden siz de tekrar kabul ettim, karışıklık için özür dilerim. – MarioDS

1

Aslında olay oluşturulduğunda yürütür altprogram yazmak gerekir :

AddHandler ObjectCreated, AddressOf OnObjectCreated 

Yan not olarak, ByRef burada hiçbir şey yapmaz. VB'deki tüm nesneler referans olarak geçirilir. Sadece varsayılan değişkenleri (dize, int, vb) varsayılan olarak ByVal kullanın ve ByRef

+0

Vay, bu çok daha basit ... Tüm gerçekten eksik olan AdressOf anahtar kelimesiydi! – MarioDS