簡體   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