WinForms Close() устанавливает DialogResult для отмены
Если я вызываю Close() в моем WinForm, кажется, что хотя DialogResult в данный момент отсутствует, сразу после вызова Close() я вижу, что для него установлено значение Отмена.
Звучит ли это нормально?
Ответ 1
Это совершенно нормально, поскольку это предполагаемое поведение. Однако это не эквивалентно щелчку красного "X" в верхнем правом углу формы, если вы используете MDI или ShowDialog().
Когда форма отображается как модальное диалоговое окно, нажмите кнопку Закрыть (кнопка с X в правом верхнем углу формы) заставляет скрыть форму и установить свойство DialogResult на DialogResult.Cancel. Метод Close не вызывается автоматически когда пользователь нажимает кнопку "Закрыть" диалогового окна или устанавливает значение свойства DialogResult. Вместо этого форма скрыта и можно снова показать без создания нового экземпляра диалогового окна. Из-за этого поведения вы должны вызвать метод Dispose формы когда форма больше не нужна вашему приложению.
Значение DialogResult может быть переопределено:
Вы можете переопределить значение, присвоенное свойству DialogResult, когда пользователь нажимает кнопку Закрыть, устанавливая свойство DialogResult в обработчике событий для события закрытия формы.
Или даже проще, вы можете установить DialogResult сразу после закрытия. Например, если ValidateSettings покажет пользователю какие-либо проблемы с формой или вернет true в противном случае: