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