C#事件和委托

时间:2010-06-09 10:18:54

标签: c# events delegates

我想分离自定义事件但无法分离。下面我使用-=分离事件。我假设在此之后,不应该调用TextChanged2方法,因为我已取消注册该事件。我的理解错了吗?

public delegate void TextChangedEventHandler1(object sender, TextBoxargs ta);
public event TextChangedEventHandler1 TextChanged1;
private void textBox1_TextChanged(object sender, EventArgs e)
{
    this.TextChanged1 -= new  TextChangedEventHandler1(TextChanged2);
    TextChanged2(sender, e);
}

public void TextChanged2(object sender, EventArgs e)
{
    textBox1.Text = textBox1.Text.ToUpper();
}

4 个答案:

答案 0 :(得分:6)

你在做什么是正确的。但是使用以下代码行可以分离事件处理程序。

this.TextChanged1 -= new  TextChangedEventHandler1(TextChanged2);

但是在第二行你直接调用了函数,所以它调用了textchange2函数:

TextChanged2(sender, e);

答案 1 :(得分:1)

  

我想分离自定义事件但是   无法脱离。

你这样做。你很好地分离了你的活动。

  

TextChanged2方法不应该   因为我没有注册而被调用   事件

不应该在this.textChanged1时调用它,而是你自己调用调用TextChanged2(sender, e);

答案 2 :(得分:1)

使用

this.TextChanged1 -= TextChanged2;

答案 3 :(得分:1)

我建议你为你的方法,控件和事件提供一些更合理的名字。我可以想象这里混淆的一半源于令人困惑的名字。

例如,在对答案的一个评论中,您提到如果您没有明确地调用TextChanged2事件处理程序(对于TextChanged1事件...),它将永远不会被调用。这会导致问题何时 ,你引发TextChanged1事件。如果您确实使用TextChanged2运算符向TextChanged1事件订阅了+=处理程序,则在引发事件后立即调用处理程序