各位大虾:
 
        VB的KeyDown无法处理Tab键,那我该如何在TextBox中输入键盘上的Tab键呢?

解决方案 »

  1.   

    当光标在TextBox上时,一旦按键盘上的Tab键,则光标自动切换到下一个控件我的意思是,如何能让光标还停留在TextBox中,并且像Word一样向后空6个空格并且在text1.text(实例)文本中加入chr(9)
      

  2.   

    TAB键对应的ASCII码是9,判断不要写在keydown事件里面,要写在keypress事件里
    Private Sub Text1_KeyPress(KeyAscii As Integer)
    MsgBox KeyAscii
    End Sub对话框弹出的返回值是 9
    Private Sub Text1_KeyPress(KeyAscii As Integer)
       if keyascii=9 then
          按下TAB键需要执行的代码
       else
          没有按下TAB键需要执行的代码
       end if
    End Sub
      

  3.   

    谢谢star55的回复,这种方法我已经试过了,KeyPress事件的等级高于KeyDown事件,所以KeyDown不能处理的,KeyPress同样无法处理。
      

  4.   

    Private Sub Text1_KeyPress(KeyAscii As Integer)
       if keyascii=9 then
          text1=text1 + chr(9)
          keyascii=0 '
       else
          'dddddd
       end if
    End Sub
      

  5.   

    上面方法也不行
    用hook试试吧
      

  6.   

    同意温水的说法,我现在也想知道hook的用法下载了几个源代码,系统提示有病毒,一直也没用过哪位高手可以给小弟指点一下啊……
      

  7.   

    Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
    GetKeyState(vbKeyTab)
      

  8.   

    Option ExplicitPrivate Sub Text1_KeyPress(KeyAscii As Integer)
        If KeyAscii = 9 Then
            SendKeys " "
            SendKeys " "
            SendKeys " "
            SendKeys " "
        End If
    End Sub
      

  9.   

    dick8125可以把回复写的清楚一点吗?小弟没看懂具体用法
      

  10.   

    Private Declare Function GetKeyState Lib "User32" (ByVal nVirtKey As Long) As Integer
        Const VK_TAB = &H9
        Sub text1_LostFocus()
        Dim iRetVal As Integer
            iRetVal = GetKeyState(VK_TAB)
            If iRetVal = 1 Then ' tab键按下
                 Text1.SetFocus
            End If
        End Sub
         
      

  11.   

    用setwindowlong,getwindowlong
    将失去焦点的消息拦截下来
    在对其进行编程就可以了
      

  12.   

    可以设置一个具有焦点的控件如Picture1,并设置 Picture1.TabIndex=Text1.TabIndex+1,将 Picture1 隐藏于 Text1 控件之下,在Picture1_GotFocus()事件中将焦点再交给Text1就可以了
      

  13.   

    呵呵,标准解法:
    Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = 9 Then
        Text1.SelText = Chr(9)
        KeyCode = 0
    End If
    End Sub
    不要动不动就用API,又危险又容易出错,兼容性也容易出问题。
      

  14.   

    900126(息夫人)你的代码实现的条件是:只有一个文本况的情况下,我刚才试过了。如果还有其他控件,你加个COMMAND试试。保证不能实现
      

  15.   

    const C_TAB="    "  '注意是四个空格
    Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = 9 Then
        Text1.Text =Text1.Text+C_TAB
        KeyCode = 0
    End If
    End Sub
      

  16.   

    大家目前讨论的方法都是只有一个文本框的情况如果有几个可以获得焦点的控件,而且TabStop=True的情况下大家想过怎么处理吗?我刚加入论坛,请问怎么给各位大虾发送分数??谢谢!!
      

  17.   

    lxxldd(菜鸟一个)你给出的代码问题一样,主要原因是在有两个控件(其中一个是要求的TEXTBOX)都能得到焦点时,在TEXTBOX中按TAB时,根本不会触发KeyDown事件!!!KEYPRESS都不会触发!!这才是问题所在!!!难道要用钩子来实现?