考虑具有以下组件的Windows Forms应用程序
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弹出时,文本将包含回车引起的换行符。这是预期的行为还是bug,或者我是唯一遇到这种情况的人?
最佳答案
您可以通过以下方式使用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");
}));
}
}
关于c# - C#MessageBox导致键处理程序忽略SuppressKeyPress,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39533361/