为什么我的自定义事件会触发两次?

时间:2015-06-29 11:48:41

标签: c# winforms events

我搜索了相关帖子,但我什么都没得到

我创建了一个用户控件。在我的用户控件中有一个文本框。我希望在我的用户控件中有一个事件,只要文本框TextChanged事件发生,就会触发该事件。
这是我到目前为止所做的:

(这是用户控制代码)

public event EventHandler txtchnged;

    public void ontxtchnged()
    {
        txtchnged(this, EventArgs.Empty);
    }

    public MyTextBox()
    {
        InitializeComponent();
        textBox1.TextChanged += textBox1_TextChanged;
    }
    private void textBox1_TextChanged(object sender, EventArgs e)
    {          
        ontxtchnged();  
    }


这是我使用过用户控件的地方

    public RegisterMainFrm()
    {

        InitializeComponent();
        myUserControl1.txtchnged += myUserControl1_txtchnged;

    }

    private void myUserControl1_txtchnged(object sender, EventArgs e)
    {
        Console.WriteLine("hello");
    }

这有效,我知道代码可能不干净,但这不是问题。问题是:"你好"将在控制台上打印两次,我真的不知道为什么以及如何解决它。

1 个答案:

答案 0 :(得分:2)

来自TextBox.TextChanged上的MSDN:

  

注意:创建TextBox控件时会触发此事件   最初填充文本。

这可能是你得到初始事件的问题吗?

更新:
来自Adriano Repetti的评论提示:您是否通过双击设计器获得了textBox1_TextChanged事件处理程序?
然后你在TextChanged事件中添加了第二个钩子。

检查UserControl的InitializeComponent中的代码是否已挂钩事件。