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

时间:2015-02-04 21:19:36

标签: c# winforms multiline textchanged

我对多行TextBox(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事件,但我需要做很多重新编码才能做到这一点。

1 个答案:

答案 0 :(得分:0)

我的具体案例的解决方法更加奇怪。

我需要文本框具有特定大小,但除非是多行,否则无法更改高度。

然而,以下内容适用于我的小世界:

    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/

找到解决方案

不解决根本问题。