Как пропустить Проверку после нажатия на Form's Cancel button

Я использую C#. У меня есть Windows Form с окном редактирования и Кнопкой отмены. Окно редактирования имеет код в проверке события. Код выполнен каждый раз, когда окно редактирования теряет фокус. Когда я нажимаю на Кнопку отмены, я просто хочу закрыть форму. Я не хочу, чтобы любая проверка для окна редактирования была выполнена. Как это может быть выполнено?

Вот важная деталь: если проверка перестала работать, то

            e.Cancel = true;

препятствует выйти из-под контроля.

Но когда пользователь нажимает Кнопку отмены, тогда форма должна быть закрыта несмотря ни на что., как это может быть реализовано?

42
задан user228985 10 December 2009 в 18:12
поделиться

6 ответов

Установите для свойства CausesValidation значение false .

4
ответ дан 26 November 2019 в 23:20
поделиться

Установите для свойства CausesValidation кнопки Отмена значение false .

18
ответ дан 26 November 2019 в 23:20
поделиться

Разумное использование свойства Control.CausesValidation поможет вам достичь желаемого.

]
2
ответ дан 26 November 2019 в 23:20
поделиться

Если проверка происходит, когда поле редактирования теряет фокус, ничто, связанное с кнопкой отмены, не остановит этого.

Однако, если неудачная проверка не позволяет кнопке отмены делая свое дело, установите для свойства CausesValidation кнопки значение false .

Ссылка: Button.CausesValidation свойство

45
ответ дан 26 November 2019 в 23:20
поделиться

Очевидно, свойство кнопки CausesValidation кнопки должно иметь значение false, и тогда событие проверки никогда не произойдет при нажатии кнопки. Но это может привести к сбою, если у родительского элемента управления кнопки для свойства CausesValidation установлено значение true. В большинстве случаев разработчики пропускают / забывают изменить свойство CausesValidation элемента управления контейнера (например, элемента управления панели). Установите также значение False. И это должно помочь.

32
ответ дан 26 November 2019 в 23:20
поделиться

Ключом является установка для CausesValidation значения false, однако одного этого недостаточно. Если у родителя кнопки CausesValidation установлено значение true, событие проверки все равно будет вызываться. В одном из моих случаев у меня была кнопка отмены на панели формы, поэтому мне пришлось установить CausesValidation = false как на панели, так и на форме. В конце концов, я сделал это программно, так как это было проще, чем просматривать все формы ...

Control control = cancelButton;

while(control != null)
{
   control.CausesValidation = false;
   control = control.Parent;
}
2
ответ дан 26 November 2019 в 23:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: