[英]C# event and delegate
我想分离自定义事件但无法分离。 下面我使用-=
来分离事件。 我假设在此之后,不应该调用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();
}
你在做什么是正确的。 但是使用以下代码行可以分离事件处理程序。
this.TextChanged1 -= new TextChangedEventHandler1(TextChanged2);
但是在第二行你直接调用了函数,所以它调用了textchange2函数:
TextChanged2(sender, e);
我想分离自定义事件但无法分离。
你做。 你很好地分离了你的活动。
不应该调用TextChanged2方法,因为我已取消注册该事件。
它不应该在this.textChanged1时调用,而是通过调用TextChanged2(sender, e);
自己调用它 TextChanged2(sender, e);
采用
this.TextChanged1 -= TextChanged2;
我建议你给你的方法,控件和事件提供一些更合理的名字。 我可以想象这里混淆的一半源于令人困惑的名字。
例如,在对答案的一个注释中,您提到如果您没有显式调用TextChanged2
事件处理程序(对于TextChanged1
事件...),它将永远不会被调用。 这将导致该问题时 , 何地 ,你提高TextChanged1
事件。 如果你确实订阅了TextChanged2
处理到TextChanged1
与事件+=
运算符,则该处理器将尽快引发该事件被调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.