C#_热键输入框的形成

来自于开源项目:数字图书复印机。作者:范传根

/// <summary>
/// 系统热键数据类。
/// </summary>
public class HotkeyValue
{
   /// <summary>
   /// 修改键。
   /// </summary>
   public Keys Modifiers = Keys.None;
   /// <summary>
   /// 按键值。
   /// </summary>
   public Keys KeyCode = Keys.None;
   /// <summary>
   /// 初始化类 <see cref="HotkeyValue"/> 的新实例。
   /// </summary>
   /// <param name="modifiers">The modifiers.</param>
   /// <param name="keyCode">The key code.</param>
   public HotkeyValue(Keys modifiers, Keys keyCode)
   {
      this.Modifiers = modifiers;
      this.KeyCode = keyCode;
   }
   /// <summary>
   /// 已重载,返回“Ctrl+Alt+A”格式的字符串。
   /// </summary>
   /// <returns>类似“Ctrl+Alt+A”格式的字符串</returns>
   public override string ToString()
   {
      StringBuilder sb = new StringBuilder();
      if ((this.Modifiers & Keys.Control) != 0)
          sb.Append("Ctrl+");
      if ((this.Modifiers & Keys.Shift) != 0)
          sb.Append("Shift+");
      if ((this.Modifiers & Keys.Alt) != 0)
          sb.Append("Alt+");

      if (this.KeyCode != Keys.None)
          sb.Append((char)this.KeyCode);

      return sb.ToString();
   }
}
//构造
public Form2()
{
   InitializeComponent();
   //定义KeyPress事件
   textBox1.KeyPress += delegate(object sender, KeyPressEventArgs e) { e.Handled = true; };
}
//TextBox的KeyDown事件
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
   if (e.Modifiers == 0) //没有修改键
   {
      e.Handled = true;
      return;
   }

   HotkeyValue value = null;
   if (e.KeyCode == Keys.ShiftKey || e.KeyCode == Keys.ControlKey || e.KeyCode == Keys.Menu || e.KeyCode == Keys.None)
   {//除修改键外,没有按键
       value = new HotkeyValue(e.Modifiers, Keys.None);
   }
   else
   {
      value = new HotkeyValue(e.Modifiers, e.KeyCode);
   }
   textBox1.Text = value.ToString();//赋值
   e.Handled = true;
   base.OnKeyDown(e);
}
posted @ 2010-07-08 22:26  小 .xin  阅读(439)  评论(0编辑  收藏  举报
回到页首