请问各位大虾 :
我在form上有九个textbox(textbox1,textbox2,textbox3....),我现在想,无论焦点在那个textbox上,或在form的任何位置, 按"F12" 都触发同一个事件,但我不想在form上的每一个控件上都加上keydown事件,简单的说,就是在这个form上,任何时候任何地方,按"F12",都触发同一个事件,而且不用写那么多的代码.
我在form上有九个textbox(textbox1,textbox2,textbox3....),我现在想,无论焦点在那个textbox上,或在form的任何位置, 按"F12" 都触发同一个事件,但我不想在form上的每一个控件上都加上keydown事件,简单的说,就是在这个form上,任何时候任何地方,按"F12",都触发同一个事件,而且不用写那么多的代码.
解决方案 »
- 如何得到Commondialog获得的多个文件名?
- 求教了!怎样让wirte生成文件时,不生成双引号!!!
- 怎么做绿色软件?
- 我想打开一下SYSTEM 32下的有关数据库的文件,如何打开?
- 求bmp文件格式类实现的代码。急急急急!!!!!
- 在点击TreeView控件某节点时如何判断该节点位于第几级目录?
- 关于datagrid的问题(菜鸟求教)!!!
- 问两个关于内存拷贝和串口通讯的问题,每个100分
- Datagrid控件最后一条记录
- 正在编写一个应用软件,要求用户购买Liscenc. 并上网注册后方可使用(为外国公司做的).如何实现
- 求VB連接SQL7.0的連接語句,急????????!!!!!!!!!!!!
- 有谁有用vb发邮件的源代码?
Option Explicit
Private Const MOD_ALT = &H1
Private Const MOD_CONTROL = &H2
Private Const MOD_SHIFT = &H4
Private Const PM_REMOVE = &H1
Private Const WM_HOTKEY = &H312
Private Type POINTAPI
x As Long
y As Long
End Type
Private Type Msg
hWnd As Long
Message As Long
wParam As Long
lParam As Long
time As Long
pt As POINTAPI
End Type
Private Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Private Declare Function UnregisterHotKey Lib "user32" (ByVal hWnd As Long, ByVal id As Long) As Long
Private Declare Function PeekMessage Lib "user32" Alias "PeekMessageA" (lpMsg As Msg, ByVal hWnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, ByVal wRemoveMsg As Long) As Long
Private Declare Function WaitMessage Lib "user32" () As Long
Private bCancel As BooleanPrivate Sub ProcessMessages()
Dim Message As Msg
'loop until bCancel is set to True
Do While Not bCancel
'wait for a message
WaitMessage
'check if it's a HOTKEY-message
If PeekMessage(Message, Me.hWnd, WM_HOTKEY, WM_HOTKEY, PM_REMOVE) Then
Call Command1_Click
End If
'let the operating system process other events
DoEvents
Loop
End SubPrivate Sub Form_Load()
Dim ret As Long
bCancel = False
'register the Ctrl-F hotkey
ret = RegisterHotKey(Me.hWnd, &HBFFF&, MOD_CONTROL, vbKeyF12)
'show some information
Me.AutoRedraw = True
Me.Print "Press CTRL-F12 to show the message"
'show the form and
Show
'process the Hotkey messages
ProcessMessages
End SubPrivate Sub Form_Unload(Cancel As Integer)
bCancel = True
'unregister hotkey
Call UnregisterHotKey(Me.hWnd, &HBFFF&)
End SubPrivate Sub Command1_Click()
MsgBox "Click me!"
End Sub
private sub myeven
end sub然后利用keyUP事件来捕捉按的键,如果是F12那么就调用myeven事件过程功能键代码:
功能键
常数 值 描述
vbKeyF1 112 F1 键
vbKeyF2 113 F2 键
vbKeyF3 114 F3 键
vbKeyF4 115 F4 键
vbKeyF5 116 F5 键
vbKeyF6 117 F6 键
vbKeyF7 118 F7 键
vbKeyF8 119 F8 键
vbKeyF9 120 F9 键
vbKeyF10 121 F10 键
vbKeyF11 122 F11 键
vbKeyF12 123 F12 键
vbKeyF13 124 F13 键
vbKeyF14 125 F14 键
vbKeyF15 126 F15 键
vbKeyF16 127 F16 键
然后就会先执行form的KeyDown的代码。
KeyPreview = True
End SubPrivate Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyF1: MsgBox "F1 is your friend."
Case vbKeyF2: MsgBox "F2 could copy text."
Case vbKeyF3: MsgBox "F3 could paste text."
Case vbKeyF4: MsgBox "F4 could format text."
End Select
End Sub
用 czw1975(塞饭)的方法就行了
只是設置form.KeyPreview =True
Form1_KeyDown事件就會首先響應所有的鍵盤事件,不知道會不會影響樓主程序的其他地方