繁体   English   中英

C#事件和委托

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM