VB.NET中关于Validating和Validated的区别有关问题
求助:VB.NET中关于Validating和Validated的区别问题
本人最近学习VB.NET,当看到textbox文本框Validating和Validated这两个事件时,有点懵了,首先,这个两个的我是理解的,Validating验证事件在控件具有焦点,以及从该控件移动到Causesvalidation=true的另一个控件时发生。而Validated事件则在焦点成功离开控件后激活。我感觉这两个事件在效果上来说没什么区别,说区别的话就是激发先后顺序的问题,而且是紧跟的,但是这两个事件的功能我个人好像感觉没什么两样,我想听听各位高手是怎么看这两个验证事件的。大家一般是在什么情况下酌情选择这两个事件中的一个的。
下面我简单编了一个例子,分别是两个文本框,一个使用Validating事件,另一个使用Validated事件分别对文本框内输入的内容是否在数字进行验证。运行后两个文本框验证的效果都是一样的:
----------------------------------------------------------------------
Private Sub TextBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
If IsNumeric(TextBox1.Text) Then
Else
MsgBox("输入的不是数字")
End If
End Sub
----------------------------------------------------------------------
Private Sub TextBox2_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2.Validated
If IsNumeric(TextBox1.Text) Then
Else
MsgBox("输入的不是数字")
End If
End Sub
------解决方案--------------------
Validating是用来重写验证方法的,Validated是用来重写验证通过后的有关通知的。假设验证不通过(Cacel=true),就根本不会触发Validated。
你只是在Validating中弄个MsgBox,即使名义上验证失败,可是你还是让验证通过了。那么许多.net的与Validating协调的机制也就根本无法正常执行。
------解决方案--------------------
其实你看一下msdn:http://msdn.microsoft.com/zh-cn/library/system.windows.forms.control.validating(v=vs.100).aspx#Y0
它也许有一点说得含糊,不过仔细看还是很容易看出区别。比如说,当提交操作首先验证时“CancelEventArgs 的 Cancel 属性设置为 true”,则自动取消随后的Validated事件,这样也就不会提交了。
而你的代码仅仅MsgBox,显然没有按照Validate的编程协议去设计代码。
本人最近学习VB.NET,当看到textbox文本框Validating和Validated这两个事件时,有点懵了,首先,这个两个的我是理解的,Validating验证事件在控件具有焦点,以及从该控件移动到Causesvalidation=true的另一个控件时发生。而Validated事件则在焦点成功离开控件后激活。我感觉这两个事件在效果上来说没什么区别,说区别的话就是激发先后顺序的问题,而且是紧跟的,但是这两个事件的功能我个人好像感觉没什么两样,我想听听各位高手是怎么看这两个验证事件的。大家一般是在什么情况下酌情选择这两个事件中的一个的。
下面我简单编了一个例子,分别是两个文本框,一个使用Validating事件,另一个使用Validated事件分别对文本框内输入的内容是否在数字进行验证。运行后两个文本框验证的效果都是一样的:
----------------------------------------------------------------------
Private Sub TextBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
If IsNumeric(TextBox1.Text) Then
Else
MsgBox("输入的不是数字")
End If
End Sub
----------------------------------------------------------------------
Private Sub TextBox2_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2.Validated
If IsNumeric(TextBox1.Text) Then
Else
MsgBox("输入的不是数字")
End If
End Sub
------解决方案--------------------
Validating是用来重写验证方法的,Validated是用来重写验证通过后的有关通知的。假设验证不通过(Cacel=true),就根本不会触发Validated。
你只是在Validating中弄个MsgBox,即使名义上验证失败,可是你还是让验证通过了。那么许多.net的与Validating协调的机制也就根本无法正常执行。
------解决方案--------------------
其实你看一下msdn:http://msdn.microsoft.com/zh-cn/library/system.windows.forms.control.validating(v=vs.100).aspx#Y0
它也许有一点说得含糊,不过仔细看还是很容易看出区别。比如说,当提交操作首先验证时“CancelEventArgs 的 Cancel 属性设置为 true”,则自动取消随后的Validated事件,这样也就不会提交了。
而你的代码仅仅MsgBox,显然没有按照Validate的编程协议去设计代码。