初学VB,问个关于command_click和keydown事件同时存在焦点设置的问题
刚学了几天VB,在个通信程序,需要四个command对象,分别是上、下、左、右方向按键,其中按键的click事件正常,我想用键盘的↑↓←→键触发窗体的keydown事件来调用按键对象的sub过程,从而实现双操作方式,,,但是,当我按键存在的时候窗体的keydown事件不能捕获到,焦点在command button上来回串,,,怎么实现键盘按键的捕获呢?不能用command button的enabled属性去让按键失效。谢谢~
keydown VB 对象 command --------------------编程问答-------------------- 我想用的是键盘上 ↑↓←→键控制,我设置过form的keypreview属性,但是用↑↓↔键还是不行呢~望指点 --------------------编程问答-------------------- 当焦点不在FORM时怎么还能用FORM的捕获
改用勾子全局捕获按键 --------------------编程问答--------------------
呵呵,刚学几天,不太了解,谢谢~我去了解下 钩子。 --------------------编程问答-------------------- 如果焦点是在按键上,键盘的方向键已经在VB内部用于窗口上的控件间移动焦点,并没有发出Keydown消息,因此,lz的这样的用途是无法实现的,必须对按键的事件进行子类化处理 --------------------编程问答-------------------- 友情提醒一下:
带钩的程序都有可能被报毒
想了个笨办法
在每一个可以获取焦点的地方都加上KeyPress
然后Case出方向键来 --------------------编程问答-------------------- 方向键没有keypress事件哦 --------------------编程问答--------------------
哦,对,是KeyDown
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)--------------------编程问答-------------------- 用上段测试了
Select Case KeyCode
Case vbKeyUp
CMD_Up_Click
Case vbKeyDown
CMD_Down_Click
Case vbKeyLeft
CMD_Left_Click
Case vbKeyRight
CMD_Right_Click
Case Else
End Select
End Sub
Private Sub CMD_Up_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyUp
CMD_Up_Click
Case vbKeyDown
CMD_Down_Click
Case vbKeyLeft
CMD_Left_Click
Case vbKeyRight
CMD_Right_Click
Case Else
End Select
End Sub
'...
在控件里截不了方向键
--------------------编程问答-------------------- 想到一个办法了
在Form里添加一个Text作为截取方向键的容器
因为不能设置隐藏只好将其移出Form显示范围之外
然后将TabIndex设为0
当点击按钮后要记得将焦点转回Text
下段程序已测试通过:
--------------------编程问答-------------------- 将所有down改为up再试试? --------------------编程问答--------------------
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyUp
Label1.Caption = "UP"
Case vbKeyDown
Label1.Caption = "Down"
Case vbKeyLeft
Label1.Caption = "Left"
Case vbKeyRight
Label1.Caption = "Right"
Case Else
End Select
End Sub
Private Sub Cmd_Up_Click()
Label1.Caption = "UP"
Text1.SetFocus
End Sub
Private Sub Cmd_Down_Click()
Label1.Caption = "Down"
Text1.SetFocus
End Sub
Private Sub Cmd_Left_Click()
Label1.Caption = "Left"
Text1.SetFocus
End Sub
Private Sub Cmd_Right_Click()
Label1.Caption = "Right"
Text1.SetFocus
End Sub
箭头键的功能在系统中已经预先定义为控件之间的焦点转移。
要拦截键盘消息,需要用到钩子。这对初学者来说,复杂了一点。
不过你可以采用一个偷懒的办法,让用户使用小键盘上的数字键 2, 4, 6, 8:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)--------------------编程问答-------------------- 不要用COMMAND按钮,用标签代替,在标签的Click()事件中处理原COMMAND按钮的Click()事件。
Select Case KeyCode
Case vbKeyNumpad8
Command1.SetFocus
Command1_Click
Case vbKeyNumpad2
Command2.SetFocus
Command2_Click
Case vbKeyNumpad4
Command3.SetFocus
Command3_Click
Case vbKeyNumpad6
Command4.SetFocus
Command4_Click
End Select
End Sub
同时将FORM的keypreview属性设置为TRUE
补充:VB , 控件