二、键盘事件

     1.使用键盘事件

       当用户按键盘键时,Windows 窗体提供两个事件,而当用户松开键盘键时,Windows 窗体提供一个事件。

  • KeyDown 事件发生一次

  • KeyPress 事件,当用户按住同一个键时,该事件可以发生多次。

  • 当用户松开键时,KeyUp 事件发生一次。

键盘事件

说明

结果

KeyDown

当用户按物理键时将引发此事件。

KeyDown 的处理程序接收:

  • 一个 KeyEventArgs 参数,它提供 KeyCode 属性(它指定一个物理键盘按钮)。

  • Modifiers 属性(Shift、Ctrl 或 Alt)。

  • KeyData 属性(它组合键代码和修改键)。 KeyEventArgs 参数还提供:

    • Handled 属性,可以设置该属性以防止基础控件接收键。

    • SuppressKeyPress 属性,它可以用来抑制该键击的 KeyPress 和 KeyUp 事件。

KeyPress

当所按的键产生字符时将引发此事件。 例如,当用户按 Shift 和小写的“a”键时,将产生大写字母“A”字符。

 

KeyPress 在 KeyDown 之后引发。

  • KeyPress 的处理程序接收:

  • 一个 KeyPressEventArgs 参数,它包含所按键的字符代码。 此字符代码对于字符键和修改键的每个组合都是唯一的。

    例如,“A”键将生成:

    • 字符代码 65(如果与 Shift 键一起按下)

    • 或 Caps Lock 键 97(如果只按下它一个键),

    • 和 1(如果它与 Ctrl 键一起按下)。

KeyUp

当用户松开物理键时将引发此事件。

KeyUp 的处理程序接收:

  • KeyEventArgs 参数:

    • 它提供 KeyCode 属性(指定一个物理键盘按钮)。

    • Modifiers 属性(Shift、Ctrl 或 Alt)。

    • KeyData 属性(它组合键代码和修改键)。

    2.修改标准控件中的键盘输入

      在 KeyPress 事件处理程序中,将 KeyPressEventArgs 类的 KeyChar 属性设置为新字符键的值

  
 1 // Detect 'B', modify it to 'A', and forward the key.
 2 case (char)66:
 3     MessageBox.Show("Control.KeyPress: '" +
 4         e.KeyChar.ToString() + "' replaced by 'A'.");
 5     e.KeyChar = (char)65;
 6     e.Handled = false;
 7     break;
 8 
 9 // Detect 'b', modify it to 'a', and forward the key.
10 case (char)98:
11     MessageBox.Show("Control.KeyPress: '" +
12         e.KeyChar.ToString() + "' replaced by 'a'.");
13     e.KeyChar = (char)97;
14     e.Handled = false;
15     break;
View Code

     修改非字符键.重写用于处理 Windows 消息的 Control 方法,并检测 WM_KEYDOWN 或 WM_SYSKEYDOWN 消息,然后将 Message 参数的 WParam 属性设置为表示新的非字符键的 Keys 值。

下面的代码示例演示如何重写控件的 PreProcessMessage 方法,以检测键 F1 到 F9,并将任何 F3 键修改为按 F1 键。

  
 1 // Detect F1 through F9 during preprocessing and modify F3.
 2 public override bool PreProcessMessage(ref Message m)
 3 {
 4     if (m.Msg == WM_KEYDOWN)
 5     {
 6         Keys keyCode = (Keys)m.WParam & Keys.KeyCode;
 7 
 8         // Detect F1 through F9.
 9         switch (keyCode)
10         {
11             case Keys.F1:
12             case Keys.F2:
13             case Keys.F3:
14             case Keys.F4:
15             case Keys.F5:
16             case Keys.F6:
17             case Keys.F7:
18             case Keys.F8:
19             case Keys.F9:
20 
21                 MessageBox.Show("Control.PreProcessMessage: '" +
22                   keyCode.ToString() + "' pressed.");
23 
24                 // Replace F3 with F1, so that ProcessKeyMessage will  
25                 // receive F1 instead of F3.
26                 if (keyCode == Keys.F3)
27                 {
28                     m.WParam = (IntPtr)Keys.F1;
29                     MessageBox.Show("Control.PreProcessMessage: '" +
30                         keyCode.ToString() + "' replaced by F1.");
31                 }
32                 break;
33         }
34     }
35 
36     // Send all other messages to the base method.
37     return base.PreProcessMessage(ref m);
38 }
View Code

 

三、窗体应用程序中的鼠标输入

    1.区分单击和双击

      (1)让Button按钮支持双击操作

1 public class DoubleClickButton : Button
2     {
3         public DoubleClickButton() : base()
4         {
5             // Set the style so a double click event occurs.
6             SetStyle(ControlStyles.StandardClick | 
7                 ControlStyles.StandardDoubleClick, true);
8         }
9     }

     (2)当单击双击触发的操作不兼容时,有两种解决方案

         一种方法是处理双击事件,然后回滚处理单击事件中执行操作

    2.拖放操作

四、在代码中模拟鼠标和键盘事件

五、Windows 窗体中的用户输入验证

posted on 2014-08-11 16:32  JustYong  阅读(458)  评论(0)    收藏  举报