c# MessageBox导致键处理程序忽略SurpressKeyPress
本文关键字:程序 SurpressKeyPress 处理 MessageBox | 更新日期: 2023-09-27 18:07:13
考虑使用以下组件的Windows窗体应用程序
partial class Form1
{
private System.Windows.Forms.TextBox textBox = new System.Windows.Forms.TextBox();
private void InitializeComponent()
{
textBox.Multiline = true;
Controls.Add(this.textBox);
KeyPreview = true;
KeyDown += new System.Windows.Forms.KeyEventHandler(Form1_KeyDown);
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
e.SuppressKeyPress = true;
if (textBox.Text.Length > 10)
MessageBox.Show("Test");
}
}
}
现在,预期的行为是将文本写入textBox
并按enter键。如果文本是
- 时间不够长,什么都不应该发生(由于
e.SuppressKeyPress = true;
),但发生了。 - 足够长,应弹出空
MessageBox
,Keys.Enter
不应到达textBox
分量。但是,当MessageBox弹出时,文本将包含由回车引起的换行。
这是预期的行为,或错误,或我是唯一的经验?
您可以通过以下方式使用BeginInvoke
调用消息框来解决这个问题:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
e.SuppressKeyPress = true;
this.BeginInvoke(new Action(() => {
if (textBox.Text.Length > 10)
MessageBox.Show("Test");
}));
}
}