组合键回显,或者说按键回显,效果可以参考QQ的热键设置
键回显需要一个TextBox用于接收按键并回显按键文本,首先处理KeyDown事件
private void txtBoxKey_KeyDown(object sender, KeyEventArgs e) { string echo = string.Empty; //处理按键,这里对修饰了默认回显 switch (e.KeyCode) { case Keys.ShiftKey: echo = "Shift"; break; case Keys.ControlKey: echo = "Ctrl"; break; case Keys.Menu: //对应Alt键 echo = "Alt"; break; case Keys.Capital: echo = "Caps"; break; case Keys.Return: echo = "Enter"; break; default: echo = e.KeyCode.ToString(); break; } //处理功能键组合,注意Modifiers与KeyCode对应的Keys.xx的不同 if ((e.Modifiers & Keys.Shift) > 0 && e.KeyCode != Keys.ShiftKey) echo = "Shift + " + echo; if ((e.Modifiers & Keys.Alt) > 0 && e.KeyCode != Keys.Menu) echo = "Alt + " + echo; if ((e.Modifiers & Keys.Control) > 0 && e.KeyCode != Keys.ControlKey) echo = "Ctrl + " + echo; //回显 txtBoxKey.Text = echo; }
KeyEventArgs的KeyCode成员用于标识按键代码,Modifiers成员用于标识指示按下的 Ctrl、Shift 和 Alt 键的组合。
Keys是一个.net枚举类型,需要注意的是Keys.Shift、Keys.Alt、Keys.Control是按键码,用于KeyEventArgs的KeyCode测试,而Keys.ShiftKey、Keys.Menu、Keys.ControlKey是标志位,用于KeyEventArgs的Modifiers测试
还需要处理KeyPress事件,跳过默认的按键盘处理
private void txtBoxKey_KeyPress(object sender, KeyPressEventArgs e) { //跳过默认的控件处理 e.Handled = true; }