2011-04-18 3 views
0

Les gestionnaires d'événements de ma classe parente ne sont jamais appelés bien que les événements soient déclenchés dans la classe enfant.Mon gestionnaire d'événements n'est jamais appelé car l'événement d'origine est déclenché dans un autre gestionnaire d'événements?

Le code:

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

Pouvez-vous montrer le code où le formulaire enfant est affiché? – Kratz

Répondre

0

Vous pouvez l'essayer comme cela comme une méthode alternative de mise en place du gestionnaire d'événements,

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

Je pense que votre question est le timing. Essayez de créer explicitement le formulaire et d'ajouter les gestionnaires dans le gestionnaire d'événements de ParentForm. (Tout cela est tapé de la mémoire et non testés donc les noms d'événement/signatures pour l'événement Load peut être incorrect.)

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

Je vais essayer d'enlever ma propre question. Quand j'ai créé un nouveau projet avec juste mon code posté cela a fonctionné. Je ne sais toujours pas comment le code presque autonome pourrait fonctionner dans un projet et pas dans un autre, mais c'est le cas des pauses. – mazoula

Questions connexes