Я предполагаю, что вы скопировали этот код откуда-то и забыли фактически подписаться на событие FormClosing. Распространенная ловушка в C #, VB.NET использует ключевое слово Handles, чтобы избежать подобных ошибок. Выберите форму, щелкните значок молнии в окне «Свойства» и дважды щелкните «FormClosing», чтобы добавить код, который подписывается на событие.
Тем не менее, на самом деле не имеет смысла писать такой код. События предназначены для другого кода для получения уведомлений, класс не должен прослушивать свои собственные события. В Winforms каждое событие вызывается защищенным методом OnXxxx (), который вы можете переопределить. Вы можете вырезать и вставить приведенный ниже код и попасть в пропасть успеха, для этого не требуется никакого дополнительного кода, такого как код подписки на событие. И, что самое приятное, он в первую очередь отдает предпочтение пользовательским обработчикам событий, типу кода, о котором вы пока не знаете, и должен получить первый шанс при работе с уведомлением.
protected override void OnFormClosing(FormClosingEventArgs e) {
base.OnFormClosing(e);
if (!e.Cancel) {
if (MessageBox.Show("Really?", "Close", MessageBoxButtons.YesNo) != DialogResult.Yes) {
e.Cancel = true;
}
}
}