我想让 Esc 键撤消对文本框的任何更改,因为它获得了焦点。
我有文字,但似乎无法弄清楚如何捕获 Esc 键。 KeyUp
和KeyPressed
似乎都没有得到它。
答案 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 有焦点,所以它也可能依赖于控件。