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