2010-06-09 23 views
2

我想分离自定义事件,但无法分离。下面我使用-=来分离事件。我在此之后,我不应该调用TextChanged2方法,因为我已经注销了该事件。我的理解错了吗?C#事件和代理

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(); 
} 
+0

你正在手动调用'TextChanged2'事件,这是你的意图吗? – ChrisF 2010-06-09 10:25:22

+0

请显示整个班级代码,因为这代码的和平有任何意义4我... – serhio 2010-06-09 13:15:59

+0

做标记答案如果你有你想要的信息 – 2012-02-06 15:20:21

回答

6

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

this.TextChanged1 -= new TextChangedEventHandler1(TextChanged2); 

但在第二行,你直接调用,以便它叫做textchange2函数功能:

TextChanged2(sender, e); 
+0

如果我删除呼叫TextChanged2(sender,e);该方法甚至不会被单独调用。 – user359562 2010-06-09 10:38:17

+1

@ user359562:man,如果你调用一个方法,它会被执行,是什么问题? – serhio 2010-06-09 10:44:30

+0

你有使用这一行注册事件处理程序:this.TextChanged1 + = new TextChangedEventHandler1(TextChanged2);因为它需要注册才能调用事件处理函数 – 2010-06-09 10:51:03

1

我要分离的自定义事件,但 不能分离。

你这样做。你很好地分离你的事件。

TextChanged2方法不应 调用,因为我已经注销了 事件。

时this.textChanged1,但你自己动手调用通过调用TextChanged2(sender, e);

1

使用

this.TextChanged1 -= TextChanged2; 
+0

这与他已有的没有什么不同。 'new TextChangedEventHandler1(...)'现在是语法糖。 – ChrisF 2010-06-09 10:28:06

1

我建议你给一些更合理的名称,以你的方法应该不会被调用,控制和事件。我可以想象,这里一半的混淆源于混乱的名字。

例如,在对一个答案的一个评论中,您提到如果您不显式调用TextChanged2事件处理程序(对于TextChanged1事件...),它将永远不会被调用。这会导致其中,您提出TextChanged1事件。如果您确实已使用+=运算符将TextChanged2处理程序订阅到TextChanged1事件,则会在引发事件后立即调用处理程序