您的位置:程序门 -> vb -> 基础类



在文本框里使用xxx.setfocus,如何才能触发validate事件


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


在文本框里使用xxx.setfocus,如何才能触发validate事件[已结贴,结贴人:cyy201]
发表于:2007-03-02 21:22:16 楼主
我在窗体里放置两个文本框(text1和text2),输入下面代码
private   sub   text1_keypress(keyascii   as   integer)
        if   keyascii   =   13   then   text2.setfocus
end   sub

private   sub   text1_validate(cancel   as   boolean)
        debug.print   "t1v "
end   sub

但发现在text1按回车,text2倒是获取焦点,但并没有执行text1_validate里的语句,请问要如何才能触发text1_validate事件

不想用text1_lostfocus,因为text1_lostfocus没有cancel
发表于:2007-03-02 23:12:511楼 得分:5
将鼠标移走其他的地方点击。   如果想自己用代码进行判断,就不需要激发这个事件,直接在  
if   keyascii   =   13   then  
    '写自己的代码
end   if
   
————————————————————————————————————
写作,虽然每个人都会查阅辞海,可,不是人人都能写出不朽的篇章的。编程,如是也。
发表于:2007-03-03 00:40:412楼 得分:5
网上资料:

validate事件  


在焦点转换到一个(第二个)控件之前发生,此时该控件的   causesvalidation   属性值设置为true。  

语法  

private   sub   object_validate(keepfocus   as   boolean)  

validate事件、   causesvalidation属性示例  
该示例使用三个控件来示范validate   事件和causesvalidation   属性的使用。在缺省情况下,两个textbox   控件的causesvalidatio   n属性设置为   true,这样当您想把焦点从一个textbox转换到另一个时,validate   事件发生。如果   text1没有包含日期或   text2没有包含一个大于10的数字,焦点的转换将被阻止。由于   command1控件的causesvalidation   属性设置为   false,因此您无论何时都可以单击help   按钮。  

要试验该示例,在窗体中放置一个commandbutton   和两个textbox   控件,将代码粘接到窗体的“声明”部分并运行此工程。按tab   键尝试转换焦点。  

private   sub   form_load()  
'设置按钮的causesvalidation属性为false。当用户  
'单击按钮时,validate事件不发生。  
'设置按钮的caption属性为“帮助”。  
with   command1  
.causesvalidation   =   false  
.caption   =   "help "  
end   with  

show  
with   text1   '选择text1的文本并为它设置焦点。  
.sellength   =   len(text1.text)  
.setfocus  
end   with  
end   sub  

private   sub   command1_click()  
'当单击此按钮时给出用户帮助信息。  
msgbox   _  
"text1   must   be   set   to   a   date. "   &   vbcrlf   &   _  
"text2   must   be   a   number   less   than   10. "  
end   sub  

private   sub   text1_validate(keepfocus   as   boolean)  
'如果值不是一个日期,则保持焦点,除非用户  
'单击help。  
if   not   isdate(text1.text)   then  
keepfocus   =   true  
msgbox   "please   insert   a   date   in   this   field. ",   ,   "text1 "  
end   if  
end   sub  

private   sub   text2_validate(keepfocus   as   boolean)  
'如果值是一个大于10的数字,保持焦点。  
if   not   isnumeric(text2.text)   or   val(text2.text)   >   10   then  
keepfocus   =   true  
msgbox   _  
"please   insert   a   number   less   than   or   equal   to   10. ",   ,   "text2 "  
end   if  
end   sub  


validate事件语法包含下面几部分:  

部分   描述  
object   一个对象表达式,其值为“应用于”列表中的一个对象。  
keepfocus   确定控件是否失去焦点的值。keepfocus设置为true时,控件保持焦点。  


说明  

validate   事件和causesvalidation   属性协同工怍,防止控件失去焦点直到满足确定的准则。  

重点   只有在即将获得焦点的控件的causesvalidation属性值设置为true时,validate事件才发生。
发表于:2007-03-03 08:50:483楼 得分:0
谢谢两位,两位讲的我知道,

我现在的问题是有时焦点已经离开,并没有触发validate   事件。例如我上面的用setfocus转移焦点时,或是用鼠标点击sstab等某些控件时,都不会触发validate,只触发lostfocus事件,但lostfocus事件里并没有办法在判断值无效时直接取消焦点的转移
发表于:2007-03-03 12:26:594楼 得分:0
3.在文本框控件中,当用鼠标移动焦点时,触发validate   事件,但用setfocus   方法移动焦点时,并不触发validate   事件,因此要通过回车键实现焦点转移,必须在keypress事件中,当keyascii=13时,编写代码来判断条件是否成立或调用validate   事件。

原文:
http://www.ytvc.com.cn/xbshzh/jsjnew/vbjpk/syzd/syzd12.htm
发表于:2007-03-03 13:15:165楼 得分:0
to   yachong(蚜虫)

 我发现不仅用setfocus不会触发,如果获取焦点的控件是sstab、flexgrid,也不会触发

 可不可以在lostfocus事件里判断,然后再拦截并吃掉焦点转移的系统消息,如果可以那要怎么做
发表于:2007-03-03 13:36:596楼 得分:10
我试验了一下,sstab肯定可以。是不是sstab的causesvalidation属性设置不正确?
发表于:2007-03-03 13:42:247楼 得分:0
to   yachong(蚜虫)  

    我的意思是在当焦点在文本框时,点击sstab来转换焦点到sstab,这时不会触发文本框的validate   事件
发表于:2007-03-03 13:44:438楼 得分:0
似乎在早期vb版本中,只能用lostfocus进行数据检查,后期的vb版本才引入了validate事件。
用lostfocus检查数据有一个缺陷——一旦焦点进入文本框,在输入正确数据之前用户根本没有办法把焦点移动到其它控件,用户甚至没有办法去点击“帮助”按钮或者“关闭”按钮。
所以尽量用validate事件比较好。因为我们可以通过设置causesvalidation属性,使得用户点击帮助(关闭)按钮的时候不触发数据检查代码段。
发表于:2007-03-03 13:46:399楼 得分:0
我的意思是在当焦点在文本框时,点击sstab来转换焦点到sstab,这时不会触发文本框的validate   事件
========================================
我试过了是可以触发的。
无论文本框是否放到sstab里面,点sstab的时候都会触发validate事件
肯定有什么地方不对劲,呵呵
发表于:2007-03-03 14:48:1610楼 得分:0
to   yachong(蚜虫)

    好像是控件的问题,不是只用vb带的文本框(这个好像都会触发),还用tdbtext(偶尔也会触发),不过既然是文本框触发validate事件,但似乎用cancel=true也无法阻止焦点转移到sstab上
发表于:2007-03-03 18:18:2711楼 得分:0
tdbtext是什么控件?没用过
我这里实验textbox控件cancel=true可以阻止焦点转移到sstab上
发表于:2007-03-03 23:29:4412楼 得分:0
to   yachong(蚜虫)

 第三方文本框控件,比vb自带的文本框控件多了些功能,如自动选中文本,限制输入等


快速检索

最新资讯
热门点击