我不是太清楚你的程序是怎么做的,我只能猜测你的意思是不是这样的?以下两种情况 1.一旦文本框得到焦点,无论什么情况其他的控件就无法得到焦点?即使用鼠标点也不行? 2.你不想使用TAB来使其他的控件得到焦点,但是用鼠标可以,比如按按钮。先说第一种情况,比较简单,所以先说呵呵 这个情况只需要让文本框一直得到焦点就可以(也就是说当文本框失去焦点的时候让它再得到焦点)代码如下 private sub text1_lostfocus() text1.setfocus end sub 但是这样一旦text1得到了焦点,程序就无法往下运行了,因为其他的控件即使用鼠标点也不能获得焦点了,我想你的程序也不是这样的,当然你可以在过程中加上if语句来控制是否可以用TAB来移动焦点也就是说如下 private sub text1_lostfocus() if text1.text<>"123" then '改为你自己的判断条件 text1.setfocus end if end sub 这样当text1中的文本不是你想要的东西的时候是不能进行任何操作的,否则就可以正常工作 第二种情况,和上面的区别是可以达到当TAB不起作用的时候鼠标可以点其他控件,所以使用的过程是不一样的,而且比上面的过程要执行的早,这个过程是validate,这个过程的作用是当控件失去焦点之前发生的(上面的是失去焦点之后,要晚的多),要利用这个过程,需要将form上的控件的causesvalidation属性设置为默认的ture才能进行,如果你是想一旦text1得到焦点其他控件就无法得到焦点,代码如下: private sub text1_validate(cancel as boolean) if text1.text<>"123" then cancel=true '设置为ture就不允许焦点转移到其他控件上 end if end sub 这样的话,当text达不到要求,那么别的控件就无法得到焦点,现在和第一种情况是完全一样的,鼠标也一样不起作用,但是你不要急,加入下面的代码后,即使text1中不是“123”你也可以用鼠标让其他的控件得到焦点,而TAB就是不行(应该是你要的效果了把?) 首先,你的工程里有command1和command2两个按钮和text1,text2,你要求的效果在text1上要实现,四个控件的TAB的顺序分别是1、2、3、0(按我写的顺序),你想要达到即使text1的文本不是“123”按钮也起左右,但是TAB不起左右,那么你把command1的causesvalidation属性设置为false,这样你如果用鼠标点command1,它就获得焦点,然后你写如下代码, private sub command1_click() '一旦点command1,就恢复正常,TAB完全没有限制 command1.causesvalidation = false command2.causesvalidation = false text2.causesvalidation = false end subprivate sub text1_gotfocus() '当text1得到焦点,进入你设置的效果,TAB有限制 command2.causesvalidation =ture text2.causesvalidation = ture end sub 现在你就可以看到,一旦text1得到焦点,除非输入“123”否则用TAB是无效的,如果输入正确,就按原来设定的tab顺序移动焦点,但是不管什么时候,一旦你点command1,就可以按原来设定的tab顺序移动焦点一次直到焦点到text1上 呵呵,应该是这样的效果把,如果不是,那你出的题还真的有点刁了,我就无能为力了:-)
1.一旦文本框得到焦点,无论什么情况其他的控件就无法得到焦点?即使用鼠标点也不行?
2.你不想使用TAB来使其他的控件得到焦点,但是用鼠标可以,比如按按钮。先说第一种情况,比较简单,所以先说呵呵
这个情况只需要让文本框一直得到焦点就可以(也就是说当文本框失去焦点的时候让它再得到焦点)代码如下
private sub text1_lostfocus()
text1.setfocus
end sub
但是这样一旦text1得到了焦点,程序就无法往下运行了,因为其他的控件即使用鼠标点也不能获得焦点了,我想你的程序也不是这样的,当然你可以在过程中加上if语句来控制是否可以用TAB来移动焦点也就是说如下
private sub text1_lostfocus()
if text1.text<>"123" then '改为你自己的判断条件
text1.setfocus
end if
end sub
这样当text1中的文本不是你想要的东西的时候是不能进行任何操作的,否则就可以正常工作
第二种情况,和上面的区别是可以达到当TAB不起作用的时候鼠标可以点其他控件,所以使用的过程是不一样的,而且比上面的过程要执行的早,这个过程是validate,这个过程的作用是当控件失去焦点之前发生的(上面的是失去焦点之后,要晚的多),要利用这个过程,需要将form上的控件的causesvalidation属性设置为默认的ture才能进行,如果你是想一旦text1得到焦点其他控件就无法得到焦点,代码如下:
private sub text1_validate(cancel as boolean)
if text1.text<>"123" then
cancel=true '设置为ture就不允许焦点转移到其他控件上
end if
end sub
这样的话,当text达不到要求,那么别的控件就无法得到焦点,现在和第一种情况是完全一样的,鼠标也一样不起作用,但是你不要急,加入下面的代码后,即使text1中不是“123”你也可以用鼠标让其他的控件得到焦点,而TAB就是不行(应该是你要的效果了把?)
首先,你的工程里有command1和command2两个按钮和text1,text2,你要求的效果在text1上要实现,四个控件的TAB的顺序分别是1、2、3、0(按我写的顺序),你想要达到即使text1的文本不是“123”按钮也起左右,但是TAB不起左右,那么你把command1的causesvalidation属性设置为false,这样你如果用鼠标点command1,它就获得焦点,然后你写如下代码,
private sub command1_click() '一旦点command1,就恢复正常,TAB完全没有限制
command1.causesvalidation = false
command2.causesvalidation = false
text2.causesvalidation = false
end subprivate sub text1_gotfocus() '当text1得到焦点,进入你设置的效果,TAB有限制
command2.causesvalidation =ture
text2.causesvalidation = ture
end sub
现在你就可以看到,一旦text1得到焦点,除非输入“123”否则用TAB是无效的,如果输入正确,就按原来设定的tab顺序移动焦点,但是不管什么时候,一旦你点command1,就可以按原来设定的tab顺序移动焦点一次直到焦点到text1上
呵呵,应该是这样的效果把,如果不是,那你出的题还真的有点刁了,我就无能为力了:-)
不好意思,在这里我只能得罪几位大哥了,这个方法根本不行,呵呵,原来我也以为是可以的,因为它可以屏蔽你输入的很多键比如ctrl等,这个办法也曾经迷惑过我,但是我试了很多次,最后发现这是根本不可能的,除非你将TabStop都设为假,那么它可以检测到你按的是不是TAB(但是将TabStop都设为假就已经没有TAB顺序了,又何必加这么多代码?),否则这两个过程根本检测不到TAB,原因就和楼主说的一样,TAB比较快,如果有TAB顺序,它是发生在这两个过程之前的,不过也不要期望在之后得到焦点的控件上使用这两个过程来检测,或者将窗体的keypreview属性设置之后来检测窗体,这也都是不可能的,原因同上
言语之中多有得罪,呵呵不要介意,大家都是学习嘛