Я использую C#. У меня есть Windows Form с окном редактирования и Кнопкой отмены. Окно редактирования имеет код в проверке события. Код выполнен каждый раз, когда окно редактирования теряет фокус. Когда я нажимаю на Кнопку отмены, я просто хочу закрыть форму. Я не хочу, чтобы любая проверка для окна редактирования была выполнена. Как это может быть выполнено?
Вот важная деталь: если проверка перестала работать, то
e.Cancel = true;
препятствует выйти из-под контроля.
Но когда пользователь нажимает Кнопку отмены, тогда форма должна быть закрыта несмотря ни на что., как это может быть реализовано?
Установите для свойства CausesValidation
значение false
.
Установите для свойства CausesValidation
кнопки Отмена значение false
.
Разумное использование свойства Control.CausesValidation
поможет вам достичь желаемого.
Если проверка происходит, когда поле редактирования теряет фокус, ничто, связанное с кнопкой отмены, не остановит этого.
Однако, если неудачная проверка не позволяет кнопке отмены делая свое дело, установите для свойства CausesValidation
кнопки значение false
.
Очевидно, свойство кнопки CausesValidation
кнопки должно иметь значение false, и тогда событие проверки никогда не произойдет при нажатии кнопки. Но это может привести к сбою, если у родительского элемента управления кнопки для свойства CausesValidation
установлено значение true. В большинстве случаев разработчики пропускают / забывают изменить свойство CausesValidation
элемента управления контейнера (например, элемента управления панели). Установите также значение False. И это должно помочь.
Ключом является установка для CausesValidation значения false, однако одного этого недостаточно. Если у родителя кнопки CausesValidation установлено значение true, событие проверки все равно будет вызываться. В одном из моих случаев у меня была кнопка отмены на панели формы, поэтому мне пришлось установить CausesValidation = false как на панели, так и на форме. В конце концов, я сделал это программно, так как это было проще, чем просматривать все формы ...
Control control = cancelButton;
while(control != null)
{
control.CausesValidation = false;
control = control.Parent;
}