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
从事件下拉列表中选择 KeyDown
和 KeyUp
并将这段代码放入两个全局键盘事件处理程序中 - 分别为 -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 并测试这是否是您需要的。
你好我想问一下是否可以在 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
从事件下拉列表中选择 KeyDown
和 KeyUp
并将这段代码放入两个全局键盘事件处理程序中 - 分别为 -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 并测试这是否是您需要的。