Можно ли использовать оператор switch для объектов Control, переданных обработчику событий?

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

if(sender == specific_control)
{
     // do something
}

Можно ли вместо этого использовать оператор switch или что-то подобное?

Когда я набираю switch(sender), я получаю сообщение об ошибке, в котором говорится

Выражение переключения или метка case должны быть типа bool, char, string, intgral, enum или соответствующего типа, допускающего значение NULL.


person Zambis    schedule 08.07.2015    source источник
comment
Преобразование в строку или значение перечисления. Затем вы можете использовать оператор switch.   -  person deathismyfriend    schedule 08.07.2015


Ответы (2)


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

Если есть какой-то общий код для выполнения при обработке всех различных событий, поместите это в один метод, который может вызываться различными методами обработчика событий.

Если приведенный выше совет не кажется применимым к вашему сценарию, улучшите свой вопрос, чтобы было ясно, почему это не так. Не забудьте включить хороший, минимальный, полный пример кода, который четко иллюстрирует объяснение.

person Peter Duniho    schedule 08.07.2015

Если эти элементы управления одного типа, вы можете использовать «Тип» элемента управления для создания оператора переключения:

//Just a snippet, you can use the FullName or Name to determine which
//control it belongs to...
        Type t = (sender).GetType();
        switch (t.FullName)
        {
            case "Namespace.Control1":
                break;
            case "Namespace.Control2":
                break;
        }
person Joel Legaspi Enriquez    schedule 08.07.2015