Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在文本框中捕获ESC_C#_.net_Winforms - Fatal编程技术网

C# 在文本框中捕获ESC

C# 在文本框中捕获ESC,c#,.net,winforms,C#,.net,Winforms,我想让Esc键撤销文本框获得焦点后的任何更改 我有文本,但似乎不知道如何捕获Esc键。KeyUp和keyppressed似乎都没有得到它。这应该可以。你是如何处理这件事的 private void textBox1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Escape) { MessageBox.Show("Escape Pressed"); } }

我想让Esc键撤销文本框获得焦点后的任何更改


我有文本,但似乎不知道如何捕获Esc键。
KeyUp
keyppressed
似乎都没有得到它。

这应该可以。你是如何处理这件事的

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);
}

这就是你要找的吗

    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;
        }
    }

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

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

然而,测试结果表明并非如此,所以它可能取决于框架版本。对我来说,无论我是否这样做,
KeyDown
都不会为ESC调用,无论我是否这样做,
KeyPress
都会为ESC调用。这是因为文本框有焦点,所以它也可能取决于控件。

请发布您的代码,并告诉我们这是winforms、webform、WPF还是其他。有关类似的答案,请参阅。有效处理OnKeyPress事件,然后检查e.KeyCode(根据keyboardP的回答)。请发布您当前的尝试!当文本框显示在对话框中时,它将不起作用,Escape是一个用于取消对话框的快捷键。您可以从TextBox派生自己的类并重写IsInputKey()。你不应该,不应该。当按下ESC键时,它从未进入此功能(对“正常”键是这样),覆盖
ProcessCmdKey
是否有效?在使用
ProcessCmdKey
之前,请尝试第一种方法,并确保KeyPreview设置为
true
。例如,在表单构造函数中,添加
this.KeyPreview=true这将影响表单。我只想捕获这一个文本框。检查您的文本框是否有焦点
if(keyData==Keys.Escape&&myTextBox.Focused)
检查您的表单中的取消/接受按钮代码是否仍然有效。否。正如我所解释的,ESC键从不触发
按键
事件