2011-04-18 57 views
0

儘管在子類中引發了事件,但我的父類中的事件處理程序從不會被調用。我的事件處理程序永遠不會調用,因爲原始事件在另一個事件處理程序中引發?

驗證碼:

Public Class childForm 

    Public Event checkboxchangedEvent(ByVal checkbox1 As Boolean, ByVal checkbox2 As Boolean) 
    Private Sub checkboxchanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged, CheckBox2.CheckedChanged 
     RaiseEvent checkboxchangedEvent(CheckBox1.Checked, CheckBox2.Checked) 
     End Sub 
End Class 

Public Class ParentForm 

Friend WithEvents cf As childform = New childform 

Private Sub cf_checkboxchanged(ByVal checkbox1 As Boolean, ByVal checkbox2 As Boolean) Handles cf.checkboxchangedEvent 

     My.Settings.checkbox1 = checkbox1 

     My.Settings.checkbox2 = checkbox2 
    End Sub 

End Class 
+0

你能告訴在顯示子窗體的代碼? – Kratz 2011-04-18 21:07:05

回答

0

你可以試試下面的這個設置事件處理程序的替代方法,

Public Sub ShowChildForm() 
    Dim frm as New childform 
    AddHandler frm.checkboxchangedevent, AddressOf cf_checkboxchanged 
    frm.ShowDialog() 
    RemoveHandler frm.checkboxchangedevent, AddressOf cf_checkboxchanged 
End Sub 
0

我覺得你的問題是時機。嘗試明確創建表單並在ParentFormLoad事件處理程序中添加處理程序。 (這是所有從內存和未經考驗的這樣事件名稱/簽名爲Load事件類型可能不正確。)

Public Class ParentForm 
    Friend WithEvents cf As childform 

    Private Sub cf_checkboxchanged(ByVal checkbox1 As Boolean, ByVal checkbox2 As Boolean) 
     My.Settings.checkbox1 = checkbox1 
     My.Settings.checkbox2 = checkbox2 
    End Sub 

    Private Sub ParentForm_Load(ByVal sender as object, ByVal e as EventArgs) Handles Me.Load 
     cf = new childForm() 
     AddHandler cf.checkboxchanged, AddressOf cf_checkboxchanged 
     cf.Show() 
    End Sub 
End Class 
+0

我會嘗試去掉我自己的問題。當我創建一個新的項目,只是我發佈的代碼它的工作。我仍然不知道幾乎自包含的代碼是如何在一個項目中工作的,而不是在另一個項目中工作,而是在休息時間中工作。 – mazoula 2011-04-18 21:35:08