C# WinForm中实现快捷键自定义设置实例

  本文源码下载:http://xiazai.glzy8.com/201501/tools/cs-key-setting.rar

  项目开发过程中,需要实现类似有道词典的软件设置中的自定义快捷键功能,如下图所示:

C# WinForm中实现快捷键自定义设置实例

  当我们相继按下Ctrl+Alt+M的时候,软件就会自动将快捷键显示在文本框中。

  最终的效果如下图所示:

C# WinForm中实现快捷键自定义设置实例

  核心代码如下所示:

  

复制代码 代码如下:

  private void keyDown(object sender, KeyEventArgs e)

  {

  StringBuilder keyValue = new StringBuilder();

  keyValue.Length = 0;

  keyValue.Append("");

  if (e.Modifiers != 0)

  {

  if (e.Control)

  keyValue.Append("Ctrl + ");

  if (e.Alt)

  keyValue.Append("Alt + ");

  if (e.Shift)

  keyValue.Append("Shift + ");

  }

  if ((e.KeyValue >= 33 && e.KeyValue <= 40) ||

  (e.KeyValue >= 65 && e.KeyValue <= 90) ||   //a-z/A-Z

  (e.KeyValue >= 112 && e.KeyValue <= 123))   //F1-F12

  {

  keyValue.Append(e.KeyCode);

  }

  else if ((e.KeyValue >= 48 && e.KeyValue <= 57))    //0-9

  {

  keyValue.Append(e.KeyCode.ToString().Substring(1));

  }

  this.ActiveControl.Text = "";

  //设置当前活动控件的文本内容

  this.ActiveControl.Text = keyValue.ToString();

  }

  private void keyUp(object sender, KeyEventArgs e)

  {

  string str = this.ActiveControl.Text.TrimEnd();

  int len = str.Length;

  if (len >= 1 && str.Substring(str.Length - 1) == "+")

  {

  this.ActiveControl.Text = "";

  }

  }

  e.KeyValue和字符的对应关系

  

字符 e.KeyValue
a-z|A-Z 65-90
F1-F12 112-123
0-9 48-57
PageUp 33
PageDown 34
End 35
Home 36
左(←) 37
上( ↑ ) 38
右(→) 39
下( ↓ ) 40

  接着,为textbox控件分别设置_KeyDown和_KeyUp事件,并在其中调用以上2个核心函数。

  如下所示:

  

复制代码 代码如下:

  private void textBox1_KeyDown(object sender, KeyEventArgs e)

  {

  keyDown(sender, e);

  }

  private void textBox1_KeyUp(object sender, KeyEventArgs e)

  {

  keyUp(sender, e);

  }