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 属性来创建全局键盘处理例程。
键码常数
键码
常数 值 描述 
vbKeyLButton 1 鼠标左键 
vbKeyRButton 2 鼠标右键 
vbKeyCancel 3 CANCEL 键 
vbKeyMButton 4 鼠标中键 
vbKeyBack 8 BACKSPACE 键 
vbKeyTab 9 TAB 键 
vbKeyClear 12 CLEAR 键 
vbKeyReturn 13 ENTER 键 
vbKeyShift 16 SHIFT 键 
vbKeyControl 17 CTRL 键 
vbKeyMenu 18 菜单键 
vbKeyPause 19 PAUSE 键 
vbKeyCapital 20 CAPS LOCK 键 
vbKeyEscape 27 ESC 键 
vbKeySpace 32 SPACEBAR 键 
vbKeyPageUp 33 PAGEUP 键 
vbKeyPageDown 34 PAGEDOWN 键 
vbKeyEnd 35 END 键 
vbKeyHome 36 HOME 键 
vbKeyLeft 37 LEFT ARROW 键 
vbKeyUp 38 UP ARROW 键 
vbKeyRight 39 RIGHT ARROW 键 
vbKeyDown 40 DOWN ARROW 键 
vbKeySelect 41 SELECT 键 
vbKeyPrint 42 PRINT SCREEN 键 
vbKeyExecute 43 EXECUTE 键 
vbKeySnapshot 44 SNAP SHOT 键 
vbKeyInser 45 INS 键 
vbKeyDelete 46 DEL 键 
vbKeyHelp 47 HELP 键 
vbKeyNumlock 144 NUM LOCK 键 
A 键到 Z 键与其 ASCII 码的相应值'A' 到 'Z' 是一致的
常数 值 描述 
vbKeyA 65 A 键 
vbKeyB 66 B 键 
vbKeyC 67 C 键 
vbKeyD 68 D 键 
vbKeyE 69 E 键 
vbKeyF 70 F 键 
vbKeyG 71 G 键 
vbKeyH 72 H 键 
vbKeyI 73 I 键 
vbKeyJ 74 J 键 
vbKeyK 75 K 键 
vbKeyL 76 L 键 
vbKeyM 77 M 键 
vbKeyN 78 N 键 
vbKeyO 79 O 键 
vbKeyP 80 P 键 
vbKeyQ 81 Q 键 
vbKeyR 82 R 键 
vbKeyS 83 S 键 
vbKeyT 84 T 键 
vbKeyU 85 U 键 
vbKeyV 86 V 键 
vbKeyW 87 W 键 
vbKeyX 88 X 键 
vbKeyY 89 Y 键 
vbKeyZ 90 Z 键 
0 键到 9 键与其 ASCII 码的相应值 '0' 到 '9' 是一致的
常数 值 描述 
vbKey0 48 0 键 
vbKey1 49 1 键 
vbKey2 50 2 键 
vbKey3 51 3 键 
vbKey4 52 4 键 
vbKey5 53 5 键 
vbKey6 54 6 键 
vbKey7 55 7 键 
vbKey8 56 8 键 
vbKey9 57 9 键 
数字小键盘上的键
常数 值 描述 
vbKeyNumpad0 96 0 键 
vbKeyNumpad1 97 1 键 
vbKeyNumpad2 98 2 键 
vbKeyNumpad3 99 3 键 
vbKeyNumpad4 100 4 键 
vbKeyNumpad5 101 5 键 
vbKeyNumpad6 102 6 键 
vbKeyNumpad7 103 7 键 
vbKeyNumpad8 104 8 键 
vbKeyNumpad9 105 9 键 
vbKeyMultiply 106 乘号 (*) 键 
vbKeyAdd 107 加号 (+) 键 
vbKeySeparator 108 ENTER 键(在数字小键盘上) 
vbKeySubtract 109 减号 (-) 键 
vbKeyDecimal 110 小数点 (.) 键 
vbKeyDivide 111 除号 (/) 键 
功能键
常数 值 描述 
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 键 

解决方案 »

  1.   

    Select Case KeyCode
        Case vbKeyDelete
        Case Else
        End Select
      

  2.   

    Private Sub Form_KeyDown(keycode As Integer, shift As Integer)
    if keycode=46 then msgbox "你按下了del键"
    End sub
      

  3.   

    Private Sub TxtNo_KeyPress(KeyAscii As Integer)    If Not (KeyAscii = vbKeyDelete) Then
            MsgBox "你确定删除某某!", vbInformation + vbOKOnly, AppName
            ...............
        End If
    End If
    End Sub
      

  4.   

    Private Sub Form_KeyDown(keycode As Integer, shift As Integer)
    if keycode=vbKeyDelete then msgbox "你按下了del键"
    End sub
      

  5.   

    我想最简单的办法是
    做个菜单项把快捷键设成Del而菜单不可见.
    楼上两位的办法我用过,好象不可以
      

  6.   

    函数名: RegisterHotKey属于组: 游戏手柄及键盘相关属于库: user32操作系统:WIN9X/NT函数声明:Declare Function RegisterHotKey Lib "user32" Alias "RegisterHotKey" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long参数列表: 返回值:  函数说明:  此函数定义一个系统热键实用举例: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 Boolean
    Private 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
                'minimize the form
                WindowState = vbMinimized
            End If
            'let the operating system process other events
            DoEvents
        Loop
    End Sub
    Private Sub Form_Load()
        'KPD-Team 2000
        'URL: http://www.allapi.net/
        'E-Mail: [email protected]
        Dim ret As Long
        bCancel = False
        'register the Ctrl-F hotkey
        ret = RegisterHotKey(Me.hWnd, &HBFFF&, MOD_CONTROL, vbKeyF)
        'show some information
        Me.AutoRedraw = True
        Me.Print "Press CTRL-F to minimize this form"
        'show the form and
        Show
        'process the Hotkey messages
        ProcessMessages
    End Sub
    Private Sub Form_Unload(Cancel As Integer)
        bCancel = True
        'unregister hotkey
        Call UnregisterHotKey(Me.hWnd, &HBFFF&)
    End Sub