Visual C# 2008 中的窗体数据验证方法

时间:2022-06-07 12:57:29

Visual C# 2008 中的窗体数据验证方法

摘要:在窗体应用程序开发中,我们需要验证用户输入的数据的正确性,ErrorProvider组件是个很好的验证组件,这篇文章分析了窗体验证中出现的问题,并给出了解决方法。

关键词:C#; VS 2008;验证;ErrorProvider组件

中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)30-7479-01

The Validation in visual c# 2008 Forms Application

ZHOU Wen, REN Qi

(Computer Application Engineering Department of Wuhan Vocation College of Software Engineering, Wuhan 430074, China)

Abstract: In Forms Application development, we need to validate the data that users inputted. ErrorProvider component is a good way of validating. This passage analyses the problem in validating when submitting the forms and gives a method to solve this problem.

Key words: C#; VS 2008; Validate; ErrorProvider

用户输入的数据往往与要求不符合,因此在窗体应用程序中,常常需要验证控件中输入的数据的合法性,例如:用户名文本框中是否为空、是否包含非法字符,年龄文本框中是否包含非数字字符等,验证这些数据,以避免发生异常的产生。

在针对一个或更多个控件提示错误信息方面,ErrorProvider组件是个不错的选择。该组件组合使用了图标向用户发出错误通知,并在相关控件的旁边显示对应的错误消息,用户输入后,在将焦点切换到下一个控件时,就会提示相应的错误信息,可以提示用户即时修改错误信息,而不用等到提交时,才检查出数据的错误,如图1所示。

为了使图1中的文本框控件支持验证,必须使控件的CausesValidation属性设置为True(该属性的默认值),并在窗体程序中拖入一个ErrorProvider组件,然后在控件的Validating事件中添加验证代码,确保“用户名”不为空(如图2所示代码段)。

图2所示代码段中,“用户名”文本框的Name属性为LoginName,当用户名文本框中字符串为空时,利用ErrorProvider的成员方法SetError来设置相应的错误信息“登录名不能为空”。另外在Validationg事件中提供了一个CancelEventArgs参数,通过设置它的Cancel属性为true,可以让焦点停留在验证未通过的控件上,直至输入正确数据,焦点才切换到新控件。因此在图1中“用户名”文本框只要为空,光标就一直停留在该文本框内,不能向下进行。反之,如果“用户名”文本框不为空时,仍然调用ErrorProvider的成员方法SetError来重置错误信息为空字符串,代表验证成功。

e.Cancel这种方式阻止了用户随意输入数据,让用户感觉不太友好,而且单击“取消”按钮也无法退出程序,必须将“取消”按钮的CausesValidation属性设置为false,才能避免发生验证事件,目前大多数的注册程序或网站都允许用户在登录界面任意输入,除了能在控件右侧即时提示错误信息(如图1中的效果),还能在提交时,再次提示错误信息,并将焦点集中在发生错误的控件上。

为了实现上述效果,除了使用ErrorProvider提供动态验证控件以外,我们还要在程序中添加支持窗体范围的验证,即当用户单击“提交”按钮完成数据输入时,对窗体范围内的所有控件都要验证一次,即逐个调用控件上的Validationg事件。但是将所有的控件的Validating事件处理代码全部添加到“提交”按钮的单击事件中,工作量很大,而且程序结构显得很冗长,有没有简单的方法呢?

在System.Windows.Forms命名空间下的ContainerControl类,可用作容器的控件提供焦点管理功能,在这个类中定义了一个public方法Validate(),调用这个方法可以通过顺序引发Validating事件验证失去焦点的控件的值,那么在“提交”按钮的Click事件中,我们只需要用循环遍历窗体中所有的控件即可,然后调用Validate()方法对每个控件进行验证,如果控件对应的errorProvider组件设置的错误信息字符串长度为0,即无错误,那么就进行下一个控件的验证,如果长度大于0,即有错误发生,则停止遍历,而焦点也停在发生错误的控件中,代码如图3所示。

在图1所示的窗体程序运行时,直接单击“提交”按钮,会触发Click事件,会遍历窗体中的所有控件的验证事件,然后将错误信息显示在对应的控件旁,如图4所示。

运行程序时会发现,焦点停在第2个文本框中,而不是第1个文本框,这是因为第1个文本框的验证在单击“提交”按钮时,就已触发,不用进入循环,因此,当循环遍历到第2个文本框,而且验证到错误时,control.Focus()语句已执行,焦点自然就停在第2个文本框中。通过调用Validate()方法,既使得控件中的数据得以验证,用户输入数据不受限制,而且也避免了将验证代码堆砌到按钮单击事件中。

参考文献:

[1] (美)内格尔. C#高级编程[M].李敏波,译.北京:清华大学出版社,2007:690-692.

[2] 江南.C#2008程序设计基础案例教程[M].北京:机械工业出版社,2010:95-96.

[3] 梁水,吕双,王小科.C#程序开发范例宝典[M].2版.北京:人民邮电出版社,2009:130-135.

[4] 王小科,徐薇.C#从入门到精通[M].2版.北京:清华大学出版社,2010:252-255.

上一篇:覆水可收:使用EasyRecovery恢复数据的方法 下一篇:专业课程教学资源网络平台的建构