C# 在文本框中捕获ESC
我想让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键。
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键从不触发按键
事件