Effective C# 原则39:使用.Net验证
2009-02-19 08:15:40 来源:WEB开发网(((s*d{3}s*))|(d{3}))-?
这和区号匹配,它充许(XXX)或者XXX的形式,其中XXX是三个数字。任何在数字周围的空白字符是充许的。最后两个字符,-和?,是许可但不要求一个横线。
剩下的部份用于匹配电话的XXX-XXXX部份。s匹配任意的空白,d{3}匹配三个数字,s*-s*匹配一个围绕在数字边上的空白字符。最后,d{4}精确匹配4个数字。
windows验证工作方法小有不同,你没有预先的验证分析。相反,你要写一个事件句柄到System.Windows.Forms.Control.Validating事件上,或者,如果你创建了你自己的控件,重载OnValidating方法(参见原则35)。下面是一个标准的方法:
private void textBoxName_Validating( object sender,
System.ComponentModel.CancelEventArgs e )
{
string error = null;
// Perform your test
if ( textBoxName.Text.Length == 0 )
{
// If the test fails, set the error string
// and cancel the validation event.
error = "Please enter a name";
e.Cancel = true;
}
// Update the state of an error provider with
// the correct error text. Set to null for no
// error.
this.errorProviderAll.SetError( textBoxName, error );
}
你有几个小工作要完成,以确保没有不合法的输入愉愉的混过去了。每一个控件包含一个CausesValidation属性,这个属性决定这个控件是否参与验证。一般情况,你应该让所有控件的这一属性为真,除非是Cancel按钮。如果你忘记了,用户还必须输出正确的值以后才能取消对话框。第二个小任务是添加OK句柄来强制验证所有的控件。验证只有在用户访问和离开控件时触发。如果用户打开了一个窗口,然后马上点OK,你的所有验证代码都不会执行。为了修正这个,你要添加OK按钮句柄,来访问所有的控件,然后强制验证它们。下面两个常规方法显示了如何正确的完成任务。递归方法处理控件以及它所包含的控件:Tab页面,控件组以及控件面板:
更多精彩
赞助商链接