Добавить / удалить обработчик в текстовое поле

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

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

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


person Rupesh    schedule 28.12.2011    source источник


Ответы (4)


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

tb1.KeyDown += TextBox_KeyDown;

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

person Piyey    schedule 28.12.2011

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

person Jason Down    schedule 28.12.2011

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

tb1.KeyDown -= TextBox_KeyDown;

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

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

person ColinE    schedule 28.12.2011

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

tb1.KeyDown -= TextBox_KeyDown;
person JohnIdol    schedule 28.12.2011