MDI菜单中响应键盘的问题?

hxd0719 2003-12-10 11:20:24
如何让MDI菜单中的子窗体响应键盘按下某个键所引发的事件啊?谢谢
...全文
8 点赞 收藏 3
写回复
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
rocllllll 2003-12-10
先声明API函数Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vkey As Long) As Integer '判断函数调用时指定虚拟键的状态
在设一个timer控件
Private Sub Timer2_Timer()
If MyHotKey(vbKeyF2) Then Form_KeyDown vbKeyF2, 0 '新增
If MyHotKey(vbKeyF3) Then Form_KeyDown vbKeyF3, 0 '修改
If MyHotKey(vbKeyF4) Then Form_KeyDown vbKeyF4, 0 '删除
If MyHotKey(vbKeyF5) Then Form_KeyDown vbKeyF5, 0 '取消
If MyHotKey(vbKeyF6) Then Form_KeyDown vbKeyF6, 0 '保存
If MyHotKey(vbKeyF7) Then Form_KeyDown vbKeyF7, 0 '查询
If MyHotKey(vbKeyF8) Then Form_KeyDown vbKeyF8, 0 '打印
If MyHotKey(vbKeyEscape) Then Form_KeyDown vbKeyEscape, 0 '退出
End Sub
Private Function MyHotKey(vKeyCode) As Boolean '判断热键状态
MyHotKey = False
MyHotKey = (GetAsyncKeyState(vKeyCode) < 0)
End Function
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If Screen.ActiveForm.Name <> Me.Name Then Exit Sub
Select Case KeyCode
Case vbKeyF2 '新增盘库单
' MsgBox "add"
Case vbKeyF3 '修改
' MsgBox "edit"
Case vbKeyF4 '删除
' MsgBox "delete"
Case vbKeyF5 '取消
' MsgBox "cancel"
Case vbKeyF6 '保存
' MsgBox "save"
Case vbKeyF7 '查询
' MsgBox "find"
Case vbKeyF8 '打印
' MsgBox "print"
Case vbKeyEscape '退出
' MsgBox "exit"
End Select
End Sub
以上应该够具体了吧!
回复
gzhiceberg 2003-12-10
能具体点吗?
回复
kimurakenshin 2003-12-10
把代码写到keydown事件里.


KeyDown、KeyUp 事件


这些事件是当一个对象具有焦点时按下 ( KeyDown ) 或松开 ( KeyUp ) 一个键时发生的。(要解释 ANSI 字符,应使用 KeyPress 事件。)

语法

Private Sub Form_KeyDown(keycode As Integer, shift As Integer)

Private Sub object_KeyDown([index As Integer,]keycode As Integer, shift As Integer)

Private Sub Form_KeyUp(keycode As Integer, shift As Integer)

Private Sub object_KeyUp([index As Integer,]keycode As Integer, shift As Integer)

KeyDown 和 KeyUp 事件包括下列部分:

部分 描述
object 一个对象表达式,其值是“应用于”列表中的一个对象。
index 是一个整数,它用来唯一标识一个在控件数组中的控件。
keycode 是一个键代码,诸如 vbKeyF1 ( F1 键)或 vbKeyHome ( HOME 键)。要指定键代码,可使用对象浏览器中的 Visual Basic ( VB ) 对象库中的常数。
shift 是在该事件发生时响应 SHIFT ,CTRL 和 ALT 键的状态的一个整数。shift 参数是一个位域,它用最少的位响应 SHIFT 键(位 0 )、CTRL 键(位 1 )和 ALT 键(位 2 )。这些位分别对应于值 1、2 和 4。可通过对一些、所有或无位的设置来指明有一些、所有或零个键被按下。例如,如果 CTRL 和 ALT 这两个键都被按下,则 shift 的值为 6。


说明

对于这两个事件来说,带焦点的对象都接收所有击键。一个窗体只有在不具有可视的和有效的控件时才可以获得焦点。虽然 KeyDown 和 KeyUp 事件可应用于大多数键,它们最经常地还是应用于:

扩展的字符键如功能键等。


定位键。


键盘修饰键和按键的组合。


区别数字小键盘和常规数字键。
在需要对按下和松开一个键都响应时,可使用 KeyDown 和 KeyUp 事件过程。

下列情况不能引用 KeyDown 和 KeyUp 事件:

窗体有一个 CommandButton 控件,并且 Default 属性设置为 True 时的 ENTER 键。


窗体有一个 CommandButton 控件,并且 Cancel 属性设置为 True 时的 ESC 键。


TAB 键。
KeyDown 和 KeyUp 用两种参数解释每个字符的大写形式和小写形式:keycode —显示物理的键(将 A 和 a 作为同一个键返回)和 shift —显示 shift + key 键的状态而且返回 A 或 a 其中之一。

如果需要测试 shift 参数,可使用该参数中定义各位的 shift 常数。该常数有下列值:

常数 值 描述
vbShiftMask 1 SHIFT 键的位屏蔽。
VbCtrlMask 2 CTRL 键的位屏蔽。
VbAltMask 4 ALT 键的位屏蔽。


该常数用作位屏蔽。它可被用来测试任何键组合。

测试一个条件时,首先将每个结果分配给一个临时整数变量,然后将 shift 与一个位屏蔽进行对比。如下例,可用 And 运算符和 shift 参数一起来测试条件是否大于 0。该条件说明该修正键被按下:

ShiftDown = (Shift And vbShiftMask) > 0

可按此例在一个过程中测试任何条件的组合:

If ShiftDown And CtrlDown Then

注意 如果 KeyPreview 属性被设置为 True,则一个窗体先于该窗体上的控件接收到此事件。可用 KeyPreview 属性来创建全局键盘处理例程。
回复
发动态
发帖子
VB基础类
创建于2007-09-28

7451

社区成员

VB 基础类
申请成为版主
社区公告
暂无公告