有关屏闭文本框控件的key_down事件,在用户输入Tab健时,也就是在keycode=9时,光标不会移动到其它控件上,因为在Key_code事件中,好像可以接收其它按健的信息,但按TAB健时,TAB健要快,该怎么办呢!有没有什么API函数可以做到这一点,我把这个文本框主要用在网格控件中。

解决方案 »

  1.   

    或者 if keycode=9 then kecode=0
      

  2.   

    将所有控件的TabStop属性都设为False就可以实现即令所有的控件都无法用Tab键来跳转焦点
      

  3.   

    我不是太清楚你的程序是怎么做的,我只能猜测你的意思是不是这样的?以下两种情况
    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上
    呵呵,应该是这样的效果把,如果不是,那你出的题还真的有点刁了,我就无能为力了:-)
      

  4.   

    另外,纠正上面几位大哥的说法1.使用TabStop属性,只能让一个控件能使用TAB来获得焦点(将TabStop属性设置为false),如果想达到让其中一个控件的TAB无效就只能牺牲所有控件的TabStop属性,这样TAB就什么时候都不能转移焦点了,但是这个方法依然可以达到楼主的要求,只是牺牲较大2.使用keydown和keypress
      不好意思,在这里我只能得罪几位大哥了,这个方法根本不行,呵呵,原来我也以为是可以的,因为它可以屏蔽你输入的很多键比如ctrl等,这个办法也曾经迷惑过我,但是我试了很多次,最后发现这是根本不可能的,除非你将TabStop都设为假,那么它可以检测到你按的是不是TAB(但是将TabStop都设为假就已经没有TAB顺序了,又何必加这么多代码?),否则这两个过程根本检测不到TAB,原因就和楼主说的一样,TAB比较快,如果有TAB顺序,它是发生在这两个过程之前的,不过也不要期望在之后得到焦点的控件上使用这两个过程来检测,或者将窗体的keypreview属性设置之后来检测窗体,这也都是不可能的,原因同上
    言语之中多有得罪,呵呵不要介意,大家都是学习嘛