在文本框中捕获ESC

时间:2012-01-02 23:15:25

标签: c# .net winforms

我想让 Esc 键撤消对文本框的任何更改,因为它获得了焦点。

我有文字,但似乎无法弄清楚如何捕获 Esc 键。 KeyUpKeyPressed似乎都没有得到它。

3 个答案:

答案 0 :(得分:7)

这应该有效。你是如何处理这个事件的?

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{          
    if (e.KeyCode == Keys.Escape)
    {
       MessageBox.Show("Escape Pressed");
    }
 }

编辑回复评论 - 尝试改为覆盖ProcessCmdKey

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{
     if (keyData == Keys.Escape && myTextBox.Focused) 
     {
         MessageBox.Show("Escape Pressed");
     }

     return base.ProcessCmdKey(ref msg, keyData);
}

答案 1 :(得分:1)

这就是你要找的东西吗?

    string origStr = String.Empty;
    private void txtOrig_Enter(object sender, EventArgs e)
    {
        origStr = txtOrig.Text;
    }

    private void txtOrig_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == Convert.ToChar(Keys.Escape))
        {
            txtOrig.Text = origStr;
        }
    }

答案 2 :(得分:0)

据说有些键不被视为“输入键”,因此默认情况下不会侦听。您需要先处理 PreviewKeyDown 才能启用它。

myTextBox.PreviewKeyDown += (s, e) => {
   if (e.KeyCode == Keys.Escape) {
      e.IsInputKey = true;
      Debug.Print("ESC should get handled now.");
   }
};

但是,测试结果另有说明,因此可能取决于框架版本。对我来说,无论我是否这样做,KeyDown 都不会被调用 ESC,无论我是否这样做,KeyPress 都会被调用 ESC。这是因为 TextBox 有焦点,所以它也可能依赖于控件。