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