如何在VB的TextBox中输入“Tab”键

时间:2022-07-30 00:56:26
各位大虾:
 
        VB的KeyDown无法处理Tab键,那我该如何在TextBox中输入键盘上的Tab键呢?

22 个解决方案

#1


一个TAB=四个空格。

#2


当光标在TextBox上时,一旦按键盘上的Tab键,则光标自动切换到下一个控件

我的意思是,如何能让光标还停留在TextBox中,并且像Word一样向后空6个空格

并且在text1.text(实例)文本中加入chr(9)

#3


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

#4


谢谢star55的回复,这种方法我已经试过了,KeyPress事件的等级高于

KeyDown事件,所以KeyDown不能处理的,KeyPress同样无法处理。

#5


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

#6


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

#7


同意温水的说法,我现在也想知道hook的用法

下载了几个源代码,系统提示有病毒,一直也没用过

哪位高手可以给小弟指点一下啊……

#8


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

#9


Option Explicit

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

#10


dick8125可以把回复写的清楚一点吗?

小弟没看懂具体用法

#11


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
     

#12


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

#13


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

#14


谢谢各位高手的指点,问题已经顺利解决

顺道问一下,怎么把分数发给你们

#15


呵呵,标准解法:
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,又危险又容易出错,兼容性也容易出问题。

#16


学习了,谢谢楼上的回复!

#17


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

#18


\t

#19


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

#20


大家目前讨论的方法都是只有一个文本框的情况

如果有几个可以获得焦点的控件,而且TabStop=True的情况下

大家想过怎么处理吗?

我刚加入论坛,请问怎么给各位大虾发送分数??

谢谢!!

#21


点击"管理"

#22


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

难道要用钩子来实现?

#1


一个TAB=四个空格。

#2


当光标在TextBox上时,一旦按键盘上的Tab键,则光标自动切换到下一个控件

我的意思是,如何能让光标还停留在TextBox中,并且像Word一样向后空6个空格

并且在text1.text(实例)文本中加入chr(9)

#3


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

#4


谢谢star55的回复,这种方法我已经试过了,KeyPress事件的等级高于

KeyDown事件,所以KeyDown不能处理的,KeyPress同样无法处理。

#5


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

#6


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

#7


同意温水的说法,我现在也想知道hook的用法

下载了几个源代码,系统提示有病毒,一直也没用过

哪位高手可以给小弟指点一下啊……

#8


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

#9


Option Explicit

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

#10


dick8125可以把回复写的清楚一点吗?

小弟没看懂具体用法

#11


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
     

#12


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

#13


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

#14


谢谢各位高手的指点,问题已经顺利解决

顺道问一下,怎么把分数发给你们

#15


呵呵,标准解法:
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,又危险又容易出错,兼容性也容易出问题。

#16


学习了,谢谢楼上的回复!

#17


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

#18


\t

#19


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

#20


大家目前讨论的方法都是只有一个文本框的情况

如果有几个可以获得焦点的控件,而且TabStop=True的情况下

大家想过怎么处理吗?

我刚加入论坛,请问怎么给各位大虾发送分数??

谢谢!!

#21


点击"管理"

#22


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

难道要用钩子来实现?