WinForms Close() устанавливает DialogResult для отмены
Если я вызываю Close() в моей WinForm, кажется, что, хотя DialogResult в данный момент не имеет значения None, сразу после вызова Close() я вижу, что для него установлено значение Cancel.
Это звучит нормально?
2 ответа
Это совершенно нормально, так как это предполагаемое поведение. Однако это не эквивалентно нажатию красной буквы "Х" в верхнем правом углу формы, если вы используете 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
Или даже проще, вы можете установить DialogResult сразу после закрытия. Например, если предположить, что ValidateSettings покажет пользователю все проблемы с формой или вернет true в противном случае:
private void btnOK_Click(object sender, EventArgs e)
{
if (ValidateSettings())
{
SaveSettings();
Close();
DialogResult = DialogResult.OK;
}
}