系统:Windows7 Pro,Visual Studio 2010,C#
我有一个文本框:textBox1
我设定了它的活动:
textBox1.KeyUp += new KeyEventHandler(textBox1_KeyUp);
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
button1.PerformClick();
}
}
private void button1_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBox1.Text))
{
MessageBox.Show("Invalid data", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
它运行正常,问题是,当输入的数据无效时,显示MessageBox
,当我在MessageBox
OK按钮上按 ENTER 时,它还会触发textBox1_KeyUp
,这会导致MessageBox
再次显示。
因此,它触发MessageBox
确定按钮,使其消失,并触发textbox_keyUp
,然后再次显示消息框。
感谢您的帮助。
答案 0 :(得分:19)
是的,消息框响应按键事件。你的TextBox也应如此。使用KeyDown事件,问题解决了。还解决了用户通常听到的恼人的BEEP。
private void textBox1_KeyDown(object sender, KeyEventArgs e) {
if (e.KeyData == Keys.Enter) {
button1.PerformClick();
e.SuppressKeyPress = true;
}
}
答案 1 :(得分:1)
我为listview解决了它,它可以用于文本框:
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
textBox1.enable = false;
button1.PerformClick();
textBox1.enable = true;
}
}
答案 2 :(得分:0)
控件只会在有焦点的情况下触发事件。因此,在您的情况下,您正在执行按钮单击,焦点仍然在文本框上,这就是您无法在消息框中使用Enter的原因。解决方案是在button1_Click方法中添加以下代码:
var btn = sender as Button;
btn.Focus();
此时焦点将设置在按钮上,因此如果您在消息框中按Enter键,则不会触发文本框的事件