#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. Я собираюсь попытаться удалить свой собственный вопрос. Когда я создал новый проект, используя только мой опубликованный код, это сработало. Я до сих пор не знаю, как почти автономный код мог работать в одном проекте, а не в другом, но это перерывы.