gpt4 book ai didi

c# Textchanged 事件在多行 TextBox 中触发两次

转载 作者:行者123 更新时间:2023-11-30 12:58:48 28 4
gpt4 key购买 nike

我在多行文本框 (WinForms) 中的 TextChanged 事件遇到了一个非常奇怪的问题。在某些情况下,该事件似乎会触发两次。

这个完整的代码演示了这个问题:

public partial class TextChangedTest : Form
{
public TextChangedTest()
{
InitializeComponent();
}

private void TextChangedTest_Load(object sender, EventArgs e)
{
TextBox tb = new TextBox();
//Remove the following line and the code behaves as expected
tb.Multiline = true;
this.Controls.Add(tb);
tb.TextChanged += new EventHandler(tb_TextChanged);
}
private void tb_TextChanged(object sender,EventArgs e)
{
//Need to validate and use the new text here.
//For testing, just use a MessageBox
MessageBox.Show("Handler fired");
}
}

如果您现在在 TextBox 中键入一个字符,则会触发该事件。正确的行为。

如果您删除该角色,该事件将触发一次。正确的行为。

如果您使用退格键删除字符,该事件将触发一次。正确的行为。

如果通过选择字符并按 Delete 键删除该字符,事件将触发一次。正确的行为。

但是

如果您选择该字符并键入另一个字符,该事件将触发两次,一次是在清除文本框之后(查看第一个事件触发时的文本框),一次是在添加字符时。如果可以理解,这种行为是无稽之谈。

这仅在设置了 Multiline 属性时发生(我正在使用它来调整 TextBox 的大小)。我只花了 5 个小时就解决了这个问题!

我的问题是我必须验证 TextChanged 事件中的每个字符,但得到的结果无效。

有没有人有什么想法?

我可能会使用 Keypress 事件,但我需要做大量的重新编码才能做到这一点。

最佳答案

我的特殊情况的解决方法更加奇怪。

我需要文本框有一个特定的大小,但高度不能改变,除非它是多行的。

然而,以下内容在我的小世界中对我有用:

    tb.Multiline = true;
tb.Size = new Size(x,y);
tb.Multiline = false;
this.Controls.Add(tb);
tb.TextChanged += new EventHandler(tb_TextChanged);

解决方案位于 http://en.code-bude.net/tag/c-textbox-height-resize/

虽然没有解决根本问题。

关于c# Textchanged 事件在多行 TextBox 中触发两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28331672/

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