Disable validation on ESC key
Problem:
There are a TextBox and a Button on the form,the Button is set to the CancelButton of Form. TextBox.CancelValidation property is set to true, while Button.CancelValidation is set to false. When clicked on Button the validation is not performed and form closes successfully but pressing ESC key does not close the Form. Clicking on the button doesnot trigger validation event and will close the Form because button is set to CauseValidation equals to false. But Pressing ESC key doesnot close the Form it triggers the Validating Event.
Workaround
To fix this problem, you may intercept the ESC key explicitly and set AutoValidate property to AutoValidate.Disable to disable the validating, sample code snippet is listed below:
VB Code
Protected Overrides Function ProcessDialogKey(ByVal keyData As System.Windows.Forms.Keys) As Boolean Dim cancel As Button = CType(Me.CancelButton, Button) If keyData = Keys.Escape Then Me.AutoValidate = Windows.Forms.AutoValidate.Disable cancel.PerformClick() Me.AutoValidate = Windows.Forms.AutoValidate.Inherit Return True End If Return MyBase.ProcessDialogKey(keyData) End Function
C# Code
protected override bool ProcessDialogKey(Keys keyData)
{
if (keyData == Keys.Escape)
{
Button close = (Button)CancelButton;
AutoValidate = System.Windows.Forms.AutoValidate.Disable;
close.PerformClick();
AutoValidate = System.Windows.Forms.AutoValidate.Inherit;
return true;
}
return base.ProcessDialogKey(keyData);
}
blog comments powered by Disqus