注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

润物无声

互相学习,以求进步

 
 
 

日志

 
 

【转载】《Validate事件 与 CausesValidation属性》  

2014-02-16 10:33:23|  分类: Visual Basic |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
本文转载自王长征(寂静之声)《《Validate事件 与 CausesValidation属性》》
        看陈伟老师讲到29集。费了很大的劲才把代码敲出来。昨天虽然花了下午加晚上的时间,但能让程序正常运行,心里有种说不出的高兴。28集,被时钟搞的就有点头大,到了29集,没想到更费事。想找程序的源代码,可是找不到。还得凭借视频来分析,问了赵帅很多次。
 
《Validate事件 与 CausesValidation属性》 - 王长征(寂静之声) - 长征的博客
 
        代码中多次出现Validate,陈老师也说了很多次CausesValidation。到底是什么意思,一直也没真正搞明白。今天想整明白,就查了一下。
        Validate 是事件,CausesValidation是属性。
 
语法:
        Private Sub object_Validate(KeepFocus As Boolean)
       KeepFocus, 确定控件是否失去焦点的值。KeepFocus设置为True时,控件保持焦点。
 

    Validate 事件,是在焦点转换到另一个控件之前发生的,此时另一个控件的 CausesValidation 属性值设置为True(注意:这是前提,如果CausesValidation 属性值设置为False,将不会发生Validate 事件当一个控件失去焦点的时候,在触发它的 LostFocus 事件之前,先被触发的将是它的 Validation 事件(同样,下面将要得到焦点的控件的 CausesValidation 属性需要设置为 true,否则将不会触发 Validation)。利用这种性质,可以在控件即将失去焦点之前检验数据的有效性。 

用户控件提供了一个 Validate 事件,它还通过 Extender 对象提供了一个 CausesValidation 属性。当焦点从该用户控件转移到 CausesValidation 属性被设置为 true 的其他控件时,Validate 事件的代码将被执行;如果将用户控件的 CausesValidation 属性设置为 True,那么任何将焦点传递给用户控件的控件的 Validation 事件都将被触发。

 

    下面用陈老师的示例来示范Validate 事件和CausesValidation 属性的使用。在缺省情况下,六个TextBox 控件(txtName 姓名,txtBirthday 出生日期,txtSalary 基本工资,txtPrize 津贴,txtTakeout 扣款,txtRmk 备注)的CausesValidation属性设置为 True,这样当把焦点从一个TextBox转换到另一个时,Validate 事件发生由于 cmdHelp控件(帮助说明)的CausesValidation 属性设置为 False,因此您无论何时都可以单击cmdHelp按钮。同理cmdOk 确定,cboSex 性别,cboDepartment 部门,cboPosition 职务的CausesValidation属性均设置为 True。

    先看txtName,txtBirthday。如果 txtName为空(Trim(txtName.Text) = ""),既没有汉字,字母,数字等 ,焦点的转换将被阻止。当运行此工程时,按Tab 键尝试转换焦点或单击其他TextBox时,Validate事件不发生。即单击除txtName本身和cmdHelp按钮外的任何按钮,表面都没有反应。

    Private Sub txtName_Validate(Cancel As Boolean)
    If (Trim(txtName.Text) = "") Then
        Cancel = True       '禁止光标移走,取消刚才的操作
   
Else
        txtName.Text = Trim(txtName.Text)
    End If

 

此时单击 cmdHelp按钮。显示:

《Validate事件 与 CausesValidation属性》 - 王长征(寂静之声) - 长征的博客
 
 
    下面在看看txtBirthday。当在txtName输入任意名字后。将光标移至txtBirthday。运行后会发现,只要txtBirthday内输入的不是日期,光标仍是无法移动。
Private Sub txtBirthday_Validate(Cancel As Boolean)
    If (Not IsDate(txtBirthday.Text)) Then
        Cancel = True     '如果值不是一个日期,则保持焦点,除非用户单击cmdHelp按钮
    End If
End Sub
   此时单击 cmdHelp按钮,获得帮助。
      
同理,我们也可以设置txtSalary,txtPrize,txtTakeout内输入的数字为特定的格式。这里就不赘述了。

 
    
  评论这张
 
阅读(33)| 评论(18)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017