У меня есть базовый класс, который у меня наследуется на моих форумах. Возможно ли выполнить код из базовой формы, прежде чем я буду выполнять код в унаследованных формах? У меня есть чек, чтобы проверить, хотят ли они закрыть базовый класс, и я не хочу ничего выполнять, пока они не скажут «да» во всплывающую форму. Как я могу это сделать?Закрытие формы
ответ
Чтобы получить точное поведение, которое я хотел, я добавил два события в мое закрытие. Один из них сразу после проверки и второй после выполнения кода. Затем я заменил событие FormClosing в классе Inherited для использования обоих событий. Этот подход дал мне больше свободы, чем просто назвать mybase.OnFormClosing
Вместо обработки события в вашем подклассе переопределите метод OnFormClosing. Затем вы можете позволить реализовать базовый класс по своему усмотрению. Тогда делай свои вещи.
Protected Overrides Sub OnFormClosing(e As System.Windows.Forms.FormClosingEventArgs)
MyBase.OnFormClosing(e)
'my stuff
End Sub
Предполагая, что вы уже установив свойство e.Cancel к истинным или ложным в случае FormClosing в вашем базовом классе, вы просто должны проверить значение e.Cancel в наследуемой форме:
Protected Overrides Sub OnFormClosing(e As FormClosingEventArgs)
MyBase.OnFormClosing(e)
If Not e.Cancel Then
MessageBox.Show("Doing Stuff")
End If
End Sub
Оба этих решения заставляют мою программу дважды проходить событие закрытия. Это нормально? –
@DotNetProgrammer Да, он запустит базовый код закрытия, а затем ваш унаследованный код закрытия базы. Отправьте свой код, если вам нужна помощь, потому что мы не можем видеть, как выглядит ваш код. – LarsTech
Это почти то же самое, что и ваш код. Он выполнит MessageBox, а затем снова запустит сообщение. Наверное, я могу добавить логическое значение, чтобы остановить его во второй раз, когда он проходит через базовый класс после унаследованного класса –
Оба этих решения заставляют мою программу проходить событие закрытия дважды. Это нормально? –