2012-04-25 43 views
5

Tôi có một biểu mẫu trong VB.NET được dùng làm hộp thoại trong biểu mẫu chính. Các trường hợp của nó luôn được định nghĩa cục bộ, không có trường nào cho nó. Khi người dùng nhấp vào nút OK trong hộp thoại, nó sẽ kích hoạt một sự kiện với chính xác một đối số, một thể hiện của một trong các lớp của tôi.Cách thêm trình xử lý sự kiện vào biến cục bộ trong VB.NET

Vì nó luôn là biến cục bộ, làm cách nào tôi có thể thêm trình xử lý sự kiện cho sự kiện đó? Tôi đã tìm kiếm cho bản thân mình và tìm thấy một cái gì đó nhưng tôi thực sự không thể tìm ra nó ...

Mã cho sự kiện, một lĩnh vực trong MyDialog:

public Event ObjectCreated(ByRef newMyObject as MyObject) 

Mã cho hình thức chính để gọi hộp thoại : (không bao giờ nhớ cú pháp)

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

Như bạn có thể thấy tôi bị kẹt về cách thêm trình xử lý cho sự kiện của mình. Ai giúp tôi với? Ưu tiên với cách tốt nhất để làm điều đó ...

Trả lời

6

Chúng tôi khuyên bạn nên sử dụng cùng một nguồn và sự kiện args như tất cả các trình xử lý sự kiện hệ thống.

Tạo lớp riêng bạn kế thừa từ EventArgs, như:

Public Class MyObjectEventArgs 
    Inherits EventArgs 

    Public Property EventObject As MyObject 

End Class 

Sau đó, tuyên bố sự kiện của bạn, và một phương pháp xử lý, như:

Public Event ObjectCreated As EventHandler(Of MyObjectEventArgs) 

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

Sau đó đính kèm xử lý sự kiện của bạn sử dụng:

AddHandler ObjectCreated, AddressOf Container_ObjectCreated 

Ngoài ra, bạn có thể sử dụng Handles để đính kèm với ev ent huy động từ hình thức chính của bạn (giả sử tên MainForm), như sau:

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

tinh thể rõ ràng, cảm ơn. – MarioDS

+0

@MarioDeSchaepmeester Tôi nghĩ câu hỏi của bạn bao gồm "Ưu tiên với cách tốt nhất để làm điều đó ...". Tại sao bạn không đánh dấu câu trả lời của tôi? –

+0

Tôi ngay lập tức nhận ra rằng vì vậy tôi chấp nhận của bạn một lần nữa, xin lỗi vì sự nhầm lẫn. – MarioDS

1

Bạn cần phải viết các chương trình con mà thực sự thực thi khi sự kiện được tạo ra:

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

Sau đó xử lý được thêm :

AddHandler ObjectCreated, AddressOf OnObjectCreated 

Như một lưu ý phụ, ByRef không có gì ở đây. Tất cả các đối tượng trong VB được truyền bằng tham chiếu. Chỉ các biến primitave (chuỗi, int, v.v.) theo mặc định, sử dụng ByVal và có thể được đặt thành ByRef

+0

Wow, điều đó đơn giản hơn nhiều ... Tất cả những gì tôi thực sự đã bỏ lỡ là từ khóa AdressOf! – MarioDS

Các vấn đề liên quan