У меня есть простая форма с одним TextBox, плюс кнопки ОК и Отмена.AcceptButton и CancelButton формы установлены правильно, а кнопки OK и Cancel имеют свой DialogResult, установленный на «OK» и «Cancel».
Я хочу добавить проверку в TextBox, которая будет препятствовать пользователю OK-Использование формы в случае сбоя проверки, но это также позволит отменить их как обычно.
Свойство CausesValidation по умолчанию имеет значение True для всех элементов управления, но я изменил значение на False для кнопки отмены.
Конечно, нажав ОК или клавишу Enter, запустится событие Validating, которое я подключил к TextBox.Нажатие кнопки «Отмена» позволяет обойти проверку, что идеально.
Однако нажатие клавиши «Escape» для отмены формы не выполняет то же действие, что и нажатие кнопки «Отмена» - вызывает событие проверки и предотвращаетпользователь не может выйти.
Есть ли способ заставить клавишу Escape работать так, как задумано, т.е. не вызывать событие проверки, как если бы была нажата кнопка «Отмена»?
Полное отработанное решениеis:
Создайте новое приложение Windows Forms.Добавьте в форму вторую форму.
Вставьте этот код в конструктор Form1 после InitializeComponent ():
MessageBox.Show((new Form2()).ShowDialog().ToString());
Это показывает DialogResult, переданный обратно из нашей второй формы.
Вставьте этот код в конструктор Form2 после InitializeComponent ():
TextBox txtName = new TextBox();
txtName.Validating +=
new CancelEventHandler((sender, e) =>
{
if (txtName.Text.Length == 3)
{
MessageBox.Show("Validation failed.");
e.Cancel = true;
}
});
Button btnOk = new Button
{
Text = "OK",
DialogResult = DialogResult.OK
};
Button btnCancel = new Button
{
Text = "Cancel",
CausesValidation = false,
DialogResult = DialogResult.Cancel
};
FlowLayoutPanel panel = new FlowLayoutPanel();
panel.Controls.AddRange(new Control[]
{
txtName, btnOk, btnCancel
});
this.AcceptButton = btnOk;
this.CancelButton = btnCancel;
this.Controls.Add(panel);
В этом упрощенном примере текстовое поле не позволит вам продолжить, если введено 3 символа.Вы можете нажать кнопку Отмена или закрыть форму напрямую, даже если присутствуют 3 символа;однако нажатие клавиши Escape будет , а не делать то же самое - оно запускает событие Validating, тогда как оно должно делать то же самое, что и нажатие кнопки Cancel.