WinForms Close () устанавливает DialogResult для отмены - PullRequest
23 голосов
/ 23 августа 2011

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

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

Ответы [ 2 ]

30 голосов
/ 18 января 2013

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

    private void btnOK_Click(object sender, EventArgs e)
    {
        if (ValidateSettings())
        {
            SaveSettings();
            Close();
            DialogResult = DialogResult.OK;
        }
    }
22 голосов
/ 23 августа 2011

Это совершенно нормально, так как это предполагаемое поведение. Однако это не эквивалентно нажатию красной буквы «X» в верхнем правом углу формы, если вы используете MDI или ShowDialog().

Когда форма отображается в виде модального диалогового окна, нажмите Закрыть кнопка (кнопка с крестиком в правом верхнем углу формы) вызывает скрытие формы и установку свойства 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...