Использование обработчика событий для нескольких элементов управления в C#

Предположим, у вас есть несколько элементов управления с обработчиками событий, которые выполняют аналогичные сложные задачи. Существует два общих подхода к минимизации дублированного кода.

Во-первых, переместить общий код в отдельный метод и заставить все обработчики событий вызвать этот метод. Этот метод прост и эффективен, но он по-прежнему дает вам несколько разных обработчиков событий, которые на самом деле мало что делают.

Другим подходом является создание одного обработчика событий, который может выполнять работу для всех элементов управления. Затем в конструкторе форм выберите элементы управления, нажмите кнопку «События» в окне «Свойства» (маленький молния), выберите событие, откройте раскрывающийся список справа и выберите обработчик событий. Теперь все элементы управления используют один и тот же обработчик событий для события.

Когда вы применяете этот подход, обработчик событий часто должен знать, какой элемент управления фактически поднял событие. Вы можете использовать параметр sender, чтобы понять это.

Следующий код обрабатывает Button Нажмите события для трех кнопок кнопки. Он преобразует параметр sender в Button, который поднял событие, а затем использует свойство Button Text для посмотрите, какая кнопка Button была нажата.

// Пользователь нажал одну из кнопок.
private void btnChoice_Click(object sender, EventArgs e)
{
    // Получить отправителя как кнопку.
    Button btn = sender as Button;

    // Делаем что-то с кнопкой.
    switch (btn.Text)
    {
        case "Yes":
            MessageBox.Show("You clicked Yes");
            break;
        case "No":
            MessageBox.Show("You clicked No. You're so negative!");
            break;
        case "Maybe":
            MessageBox.Show("You clicked Maybe. A bit undecided?");
            break;
    }
}

Вместо использования свойства Text отправителя вы можете использовать свойство Tag элемента управления. Или вы можете сравнить sender с элементами управления напрямую, как в следующем коде:

if (sender == btnYes) ...

Источник: http://csharphelper.com/blog/2014/09/use-an-event-handler-for-multiple-controls-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Adblock
detector