2011-12-28 2 views
7

Я добавляю обработчик текстового поля, используя следующий код:Добавить/Удалить обработчик текстового поля

private void frmLogin_Load(object sender, EventArgs e) 
{ 
    foreach (Control tb in this.Controls) 
    { 
     if (tb is TextBox) 
     { 
      TextBox tb1 = (TextBox)tb; 
      tb1.KeyDown += new KeyEventHandler(TextBox_KeyDown); 
     }  
    } 
} 

Я также удаление обработчика, используя следующий код:

private void frmLogin_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    foreach (Control tb in this.Controls) 
    { 
     if (tb is TextBox) 
     { 
      TextBox tb1 = (TextBox)tb; 
      tb1.KeyDown -= new KeyEventHandler(TextBox_KeyDown); 
     } 
    } 
} 

Является ли правильным способом или есть ли лучшая альтернатива?

ответ

5

Это хорошо, но вам не нужно, чтобы удалить обработчик, и добавляя обработчик просто поставить это:

tb1.KeyDown += TextBox_KeyDown; 

потому что new KeyEventHandler(TextBox_KeyDown); является излишним.

+0

И я знаю, что компилятор создает обработчик добавления с новым KeyEventHandler, но мой инструмент рефакторинга говорит мне, что это избыточное создание делегата. – Piyey

2

Чтобы удалить обработчик события, вы должны просто сделать:

tb1.KeyDown -= TextBox_KeyDown; 
4

Ваш подход прекрасно. В добавлении и удалении делегата обработчика события вы можете опустить new KeyEventHandler и окружающие круглые скобки вокруг TextBox_KeyDown. Они подразумеваются компилятором (пока метод TextBox_KeyDown имеет ожидаемую подпись). Это, конечно, вопрос предпочтения.

3

Да, это совершенно правильно. Однако вы можете использовать сокращенное обозначение:

tb1.KeyDown -= TextBox_KeyDown; 

Хотя эффект точно такой же.

Однако стоит ли вам действительно удалять обработчик событий? Каков жизненный цикл вашей формы и TextBox? если форма «владеет» TexBox, то есть она более долговечна, тогда вам не нужно удалять обработчик событий.

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