gpt4 book ai didi

C# MessageBox 导致键处理程序忽略 SuppressKeyPress

转载 作者:行者123 更新时间:2023-11-30 23:20:58 26 4
gpt4 key购买 nike

考虑具有以下组件的 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 并按回车键。如果文本是

  • 时间不够长,什么都不应该发生(由于 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");
}));
}
}

关于C# MessageBox 导致键处理程序忽略 SuppressKeyPress,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39533361/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com