C # событие и делегат - PullRequest
2 голосов
/ 09 июня 2010

Я хочу отменить пользовательское событие, но не могу отсоединиться.Ниже я использую -= для отсоединения события.Я предполагаю, что после этого метод 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();
}

Ответы [ 4 ]

6 голосов
/ 09 июня 2010

То, что вы делаете, правильно.Но используя следующую строку кода, вы можете отсоединить обработчик событий.

this.TextChanged1 -= new  TextChangedEventHandler1(TextChanged2);

Но во второй строке вы вызвали функцию напрямую, чтобы она вызывала функцию textchange2:

TextChanged2(sender, e);
1 голос
/ 09 сентября 2010

Я предлагаю вам дать более разумные имена вашим методам, элементам управления и событиям.Я мог бы представить, что половина этого недоразумения проистекает из запутанных имен.

Например, в одном комментарии к ответу вы упоминаете, что если вы не вызываете обработчик события TextChanged2 (для события TextChanged1...) явно, он никогда не будет вызван.Это привело бы к вопросу , когда , и , где , вы вызываете событие TextChanged1.Если вы действительно подписали обработчик TextChanged2 на событие TextChanged1 с помощью оператора +=, то обработчик будет вызываться, как только событие возникнет.

1 голос
/ 09 июня 2010

Использование

this.TextChanged1 -= TextChanged2;
1 голос
/ 09 июня 2010

Я хочу отключить пользовательское событие, но не удалось отсоединиться.

Вы делаете. Вы очень хорошо отделяете свое мероприятие.

Метод TextChanged2 не должен быть вызван как я незарегистрированный событие.

Он не должен вызываться, когда this.textChanged1, но вы сами вызываете его , вызывая TextChanged2(sender, e);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...