我想分离自定义事件但无法分离。下面我使用-=
分离事件。我假设在此之后,不应该调用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();
}
答案 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
事件订阅了+=
处理程序,则在引发事件后立即调用处理程序 。