Мой обработчик событий никогда не вызывается, потому что исходное событие вызвано в другом обработчике событий?

#vb.net #winforms #events

#vb.net #winforms #Мероприятия

Вопрос:

Обработчики событий в моем родительском классе никогда не вызываются, хотя события вызываются в дочернем классе.

Код:

 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
  

Комментарии:

1. Можете ли вы показать код, в котором отображается дочерняя форма?

Ответ №1:

Вы могли бы попробовать это следующим образом в качестве альтернативного метода настройки обработчика событий,

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

Ответ №2:

Я думаю, что ваша проблема во времени. Попробуйте явно создать форму и добавить обработчики в ParentForm Load обработчик событий. (Все это набрано из памяти и непроверено, поэтому имена событий / подписи для 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
  

Комментарии:

1. Я собираюсь попытаться удалить свой собственный вопрос. Когда я создал новый проект, используя только мой опубликованный код, это сработало. Я до сих пор не знаю, как почти автономный код мог работать в одном проекте, а не в другом, но это перерывы.