C# 如何在键入';输入';或';Esc&x27;
我有一个表单,上面只有一个文本框。没有其他控件。每当我键入“回车”键或“Esc”键时,表单就会按我的要求运行;但我听到了可怕的Windows错误声音。代码看起来类似于以下内容C# 如何在键入';输入';或';Esc&x27;,c#,winforms,C#,Winforms,我有一个表单,上面只有一个文本框。没有其他控件。每当我键入“回车”键或“Esc”键时,表单就会按我的要求运行;但我听到了可怕的Windows错误声音。代码看起来类似于以下内容 public class EntryForm: Form { public EntryForm() { } private void EntryTextBox_KeyUp(object sender, KeyEventArgs e) { if(e.KeyCode == Keys.Enter)
public class EntryForm: Form
{
public EntryForm()
{
}
private void EntryTextBox_KeyUp(object sender, KeyEventArgs e)
{
if(e.KeyCode == Keys.Enter)
{
// do some stuff
Hide(); // I've also used DialogResult = DialogResult.OK here
e.Handled = true;
}
else if(e.KeyCode == Keys.Escape)
{
Hide(); // I've also used DialogResult = DialogResult.Cancel here
e.Handled = true;
}
}
}
我可以通过向表单的构造函数中添加以下代码来“破解”它并停止噪音
AcceptButton = new Button();
CancelButton = new Button();
正如我所说,这会导致声音无法播放,但我认为这是一种糟糕的形式;特别是因为我不需要表单上的按钮
有人知道这是为什么吗?如果有更干净的方法阻止错误声音播放?在KeyDown事件中,设置
e.Handled=true
和e.SuppressKeyPress=true
有一个更“正确”的修正,无论有多少控件都可以使用,并且遵循Windows窗体设计模型。将此代码粘贴到表单中:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
if (keyData == Keys.Escape || keyData == Keys.Enter) {
this.Hide();
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
这是一个太长的答复Nobugz的答案,适合在评论。如果按原样使用Nobugz代码:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (msg.HWnd == textBox1.Handle)
{
if (keyData == Keys.Escape || keyData == Keys.Enter)
{
textBox1.Hide();
return true;
}
}
return base.ProcessCmdKey(ref msg, keyData);
}
当然,如果您想处理需要隐藏多个控件的情况,您可以实现一个“switch”语句或其他任何语句来测试msg.HWnd:注意,我在这里假设所有可能有键盘输入的控件都有一个有效的HWnd
一些记忆(模糊)的情况下,我使用了这种技术,和文本输入控制不知何故仍然有键盘输入焦点。。。当我不想让它。。。让我想添加一个附加测试,如下所示:
&& this.ActiveControl == textBox1
但是,请恕我直言,因为我不能肯定这是必要的。如果你没有任何按钮,当你按下enter键或esc键时,你是如何让对话框形成的?当您按enter或esc键时,带有JU编辑控件的窗体通常只会坐在那里。@John Knoweller-Hide()方法隐藏窗体。还可以将visible属性设置为false。如果以模式显示表单,只需设置代码中的对话框结果,表单就会消失。@Andrew-这样做对行为没有任何影响。不过,感谢您的回答,因为我以前从未见过SuppressKeyPress属性在keyUp事件中使用code><代码>e.Handled=true按键中的代码>event@BillW-谢谢你提供的额外信息。在这种情况下,我确实希望整个表单被隐藏;但这些信息对未来来说是很好的。