KeyDown 映射到 GUI 表单按钮按下状态

KeyDown map to GUI form button downstate

你好我想问一下是否可以在 Visual Basic 6 中映射键盘的 KeyDown 以在按下键盘键然后返回时将窗体上图形命令按钮的状态转换为 "Down State"释放时提高?谢谢

CommandButton 控件有鼠标和键盘的按下和向上事件:

Private Sub Command1_Click()
  Debug.Print "click"
End Sub

Private Sub Command1_KeyDown(KeyCode As Integer, Shift As Integer)
  Debug.Print "keydown"
End Sub

Private Sub Command1_KeyUp(KeyCode As Integer, Shift As Integer)
  Debug.Print "keyup"
End Sub

Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  Debug.Print "mousedown"
End Sub

Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  Debug.Print "mouseup"
End Sub

我知道这里的问题,因为我过去做了一些类似的事情,最后使用了 PictureBoxes 数组而不是图形 CommandButtons

无论如何,CommandButtons 的一个简单解决方法是通过向 Form 添加另一个可以充当焦点目标的控件来保持焦点远离。请记住:当 Form 被激活时,它会将焦点放在其内部的第一个可聚焦控件上。

因为你没有在你的问题中指定你需要什么样的键盘状态,下面是一个简单的例子 a s d f 键。您将需要不到 5 分钟的时间来完成它 运行.

第 0 步:

将以下声明复制并粘贴到您的 VB Form:

Option Explicit
Option Base 0

Const BM_SETSTATE = &HF3    
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Dim Target(254) As Long

第 1 步:

向您的 Form 添加一个名为 CommandButtons 的数组,例如 Button(0)Button(1) Button(2)Button(3)等。 设置您需要的属性(Picture、DownPicture 等)并设置:

 TabStop: False 

双击其中一个 CommandButtons。您可以看到,整个控件数组只有一个入口点。从事件下拉列表中选择 GotFocus 并输入这段代码:

Private Sub Button_GotFocus(Index As Integer)
    PicFocus.SetFocus
End Sub

第 2 步:

在您的 VB Form 上,设置此 属性:

 KeyPreview: True

双击 Form,从事件下拉列表中选择 Load,然后在 KeyCode 和相应的 CommandButton 之间设置您想要的映射:

Private Sub Form_Load()
    Target(65) = Button(0).hwnd  ' 65: KeyCode for "a"
    Target(83) = Button(1).hwnd  ' 83: KeyCode for "s"
    Target(68) = Button(2).hwnd  ' 68: KeyCode for "d"
    Target(70) = Button(3).hwnd  ' 70: KeyCode for "f"
End Sub

从事件下拉列表中选择 KeyDownKeyUp 并将这段代码放入两个全局键盘事件处理程序中 - 分别为 -1 表示按下状态和 0 表示向上-状态:

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    ' Debug.Print KeyCode
    Call PostMessage(Target(KeyCode), BM_SETSTATE, -1&, 0&)
End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    Call PostMessage(Target(KeyCode), BM_SETSTATE, 0&, 0&)
End Sub

第 3 步:

最后,将上面提到的 PictureBox 添加到相同的 VB Form 并设置以下属性:

 Name: PicFocus 
 Appearance: 0-Flat 
 BorderStyle: 0-None 
 HasDC: False
 TabIndex: 0 
 TabStop: False 
 Width: 255 
 Left: -1000

Ctrl+F5 并测试这是否是您需要的。