2012-01-31 3 views
0

Я установил EventHandler к событию, как это:Как я могу удалить следующий обработчик событий?

frm.FormClosed += (sender, args) => 
        { 
         if (this.myGrid.Enabled) 
         { 
          this.myGrid.Select(); 
         } 
        }; 
frm.Show(); 

Я хочу вывесить EventHandler после того, как форма была закрыта.

Вы можете мне помочь?

+12

может быть, это я, но что вы имеете в виду под "болтаться обработчик события? – kenny

+0

@kenny Я думаю, что он хотел отменить/удалить событие. – Meryovi

+0

@pro Почему именно вы хотите это сделать? – Meryovi

ответ

4

Я хочу покончить с обработчиком событий после того, как форма была закрыта.

Я предполагаю, что вы хотите его удалить.

  1. Не нужно, не тратьте время на него. Когда Форма закрыта (и удалена), сборщик событий также будет собран. Он является членом той же Формы, которая следует из слова this в коде.

  2. Если вы все еще хотите, чтобы удалить его, вам потребуется копия:

    FormClosedEventhandler closeHandler; // class member 
    
    
    
    closeHandler = (sender, args) => 
         { 
         if (this.myGrid.Enabled) 
         { 
          this.myGrid.Select(); 
         } 
         }; 
    
    frm.FormClosed += closeHandler ; // OnLoad 
    ... 
    
    frm.FormClosed -= closeHandler ; // OnClose 
    
+2

Если вы создаете две идентичные лямбды, они не обязательно будут одной и той же ссылкой ([эта тема обсуждалась здесь] (http://stackoverflow.com/q/4807808/880802)), поэтому вы не должны полагаться на это а скорее сохраните ссылку в переменной. – Nuffin

+0

@Tobias: Хорошо, спасибо. Я видел, что он используется, но все равно выглядит ужасно. Я отредактирую. –

+0

Привет, спасибо, это помогло мне. – bitsmuggler

4

Если вы имеете в виду, как удалить вас обработчик события от события, то вы будете не в состоянии использовать анонимный делегат, но вы можете создать метод с теми же параметрами и тем же кодом, а затем:

private void EventHandler(object sender, FormClosedEventArgs e) 
{ 
    if (this.myGrid.Enabled) 
    { 
     this.myGrid.Select(); 
    } 
} 

frm.FormClosed += EventHandler; // Attach the event handler 
frm.FormClosed -= EventHandler; // Remove the event handler 
+0

«EventHandler» уже является именем делегата в библиотеке. –

+1

@HenkHolterman Это не проблема, но OP, вероятно, может выбрать значащее имя –

Смежные вопросы