События закрытия окна в приложении winforms - PullRequest
5 голосов
/ 31 января 2011

Я хочу предложить пользователю сохранить данные при закрытии окна формы в приложении winforms. Я не могу понять, как вызвать приглашение для пользователя, если он щелкнет красное поле в верхнем правом углу формы.

Мое приложение в настоящее время имеет логический флаг, который имеет значение True для события с измененным текстом. Поэтому мне нужно будет проверять только логическое значение в любом событии, которое вызывается красным полем.

Любой совет?

Ответы [ 4 ]

12 голосов
/ 31 января 2011

Вам необходимо обработать событие FormClosing . Это событие возникает непосредственно перед закрытием формы, потому что пользователь нажал кнопку "X" встрока заголовка или любым другим способом.

Поскольку событие вызывается до формы закрыто, это дает вам возможность отменить событие закрытия.Вам передан экземпляр класса FormClosingEventArgs в параметре e.Установив для свойства e.Cancel значение True, вы можете отменить ожидающее событие закрытия.

Например:

Private Sub Form_Closing(ByVal sender As Object, ByVal e As FormClosingEventArgs)
    If Not isDataSaved Then
        ' The user has unsaved data, so prompt to save
        Dim retVal As DialogResult
        retVal = MessageBox.Show("Save Changes?", YesNoCancel)
        If retVal = DialogResult.Yes Then
            ' They chose to save, so save the changes
            ' ...
        ElseIf retVal = DialogResult.Cancel Then
            ' They chose to cancel, so cancel the form closing
            e.Cancel = True
        End If
        ' (Otherwise, we just fall through and let the form continue closing)
    End If
End Sub
5 голосов
/ 21 февраля 2013

Я реализую этот код для C # надеюсь, поэтому он полезен для вас

protected override void OnFormClosing(FormClosingEventArgs e)
            {            
                base.OnFormClosing(e);
                if (PreClosingConfirmation() == System.Windows.Forms.DialogResult.Yes)
                {
                    Dispose(true);
                    Application.Exit();
                }
                else
                {
                    e.Cancel = true;
                }
            }

        private DialogResult PreClosingConfirmation()
        {
            DialogResult res = System.Windows.Forms.MessageBox.Show(" Do you want to quit?          ", "Quit...", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            return res;
        }
5 голосов
/ 31 января 2011

Если вы переопределите метод OnFormClosing формы, у вас будет возможность уведомить пользователя о внесенных изменениях и возможность отменить закрытие формы.

Событие предоставляет вамс экземпляром FormClosingEventArgs , который имеет свойство CloseReason (которое сообщает вам, почему форма закрывается), а также свойством Cancel, которое можно установить равным True, чтобы остановить закрытие формы.

0 голосов
/ 31 января 2011

Вам нужно FormClosing Событие

...