只能用API吗?如何用API响应KEYDOWN合KEYPRESS事件,优先级如何?

解决方案 »

  1.   

    可以在MDI窗體內畫一個PictureBox,通過PictureBox的事件來響應
      

  2.   

    可是我的目的就是要在MDI窗体这个“母体”上,比子窗体、窗体内的部控件,有最高的响应优先权的KEYDOWN合KEYPRESS事件。
      

  3.   

    還是要利用API以下為轉貼:
    先声明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