二、键盘事件
1.使用键盘事件
当用户按键盘键时,Windows 窗体提供两个事件,而当用户松开键盘键时,Windows 窗体提供一个事件。
-
KeyDown 事件发生一次
-
KeyPress 事件,当用户按住同一个键时,该事件可以发生多次。
-
当用户松开键时,KeyUp 事件发生一次。
|
键盘事件 |
说明 |
结果 |
|---|---|---|
|
KeyDown |
当用户按物理键时将引发此事件。 |
KeyDown 的处理程序接收:
|
|
KeyPress |
当所按的键产生字符时将引发此事件。 例如,当用户按 Shift 和小写的“a”键时,将产生大写字母“A”字符。
|
KeyPress 在 KeyDown 之后引发。
|
|
KeyUp |
当用户松开物理键时将引发此事件。 |
KeyUp 的处理程序接收:
|
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;
修改非字符键.重写用于处理 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 }
三、窗体应用程序中的鼠标输入
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 窗体中的用户输入验证
浙公网安备 33010602011771号