Проблема : событие FormClosing () диалогового окна возникает, если оно является дочерним, то есть его свойство Owner установлено на родительскую форму, но НЕ, если оно является дочерним. Таким образом, закрытие главной формы не вызывает событие закрытия в диалогах внуков.
Сведения : диалоговое окно предлагает «Сохранить изменения?» С кнопками YesNoCancel в событии FormClosing (). При нажатии кнопки «Отмена» диалоговое окно остается открытым, т. Е. Отменяется закрытие.
Private Sub Dialog_FormClosing(...) Handles Me.FormClosing
If MessageBox.Show("Save Changes?", YesNoCancel) = No Then
e.Cancel = True
End If
End Sub
Таким образом, создание нового диалога с установленным свойством Owner ...
// called from the main form
Dim dlg As New Dialog
dlg.Owner = Me
dlg.Show()
... имеет то преимущество, что диалоговое окно предложит сохранить, если пользователь попытается закрыть владельца / родителя. При нажатии кнопки «Отмена» диалоговое окно останется открытым, а также его владельцем.
Но если это же диалоговое окно было показано от потомка родителя (также с установленным свойством владельца), а не от родителя:
// called from another child
Dim dlg As New Dialog
dlg.Owner = Me
dlg.Show()
Тогда событие FormClosing () для дочернего элемента не возникает, если закрывается самый верхний родительский элемент.
Это известное ограничение дизайна в рамках? Есть ли что-то, что я должен рассмотреть, прежде чем начать взламывать неприятное решение для этого?
Спасибо за любые ответы.