Подтвердить что ты не робот

WinForms Close() устанавливает DialogResult для отмены

Если я вызываю Close() в моем WinForm, кажется, что хотя DialogResult в данный момент отсутствует, сразу после вызова Close() я вижу, что для него установлено значение Отмена.

Звучит ли это нормально?

4b9b3361

Ответ 1

Это совершенно нормально, поскольку это предполагаемое поведение. Однако это не эквивалентно щелчку красного "X" в верхнем правом углу формы, если вы используете MDI или ShowDialog().

Когда форма отображается как модальное диалоговое окно, нажмите кнопку Закрыть (кнопка с X в правом верхнем углу формы) заставляет скрыть форму и установить свойство DialogResult на DialogResult.Cancel. Метод Close не вызывается автоматически когда пользователь нажимает кнопку "Закрыть" диалогового окна или устанавливает значение свойства DialogResult. Вместо этого форма скрыта и можно снова показать без создания нового экземпляра диалогового окна. Из-за этого поведения вы должны вызвать метод Dispose формы когда форма больше не нужна вашему приложению.

Значение DialogResult может быть переопределено:

Вы можете переопределить значение, присвоенное свойству DialogResult, когда пользователь нажимает кнопку Закрыть, устанавливая свойство DialogResult в обработчике событий для события закрытия формы.

http://msdn.microsoft.com/en-us/library/system.windows.forms.form.dialogresult(v=VS.100).aspx

Ответ 2

Или даже проще, вы можете установить DialogResult сразу после закрытия. Например, если ValidateSettings покажет пользователю какие-либо проблемы с формой или вернет true в противном случае:

    private void btnOK_Click(object sender, EventArgs e)
    {
        if (ValidateSettings())
        {
            SaveSettings();
            Close();
            DialogResult = DialogResult.OK;
        }
    }