2011-04-18 56 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