Добавить / Удалить обработчик в текстовое поле - PullRequest
8 голосов
/ 28 декабря 2011

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

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);
        }
    }
}

Это правильный путь или естьлучшая альтернатива?

Ответы [ 4 ]

6 голосов
/ 28 декабря 2011

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

tb1.KeyDown += TextBox_KeyDown;

, потому что new KeyEventHandler(TextBox_KeyDown); избыточен.

4 голосов
/ 28 декабря 2011

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

3 голосов
/ 28 декабря 2011

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

tb1.KeyDown -= TextBox_KeyDown;

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

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

2 голосов
/ 28 декабря 2011

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

tb1.KeyDown -= TextBox_KeyDown;
...