Как можно избавиться от подобного мусора в коде?

Написал обработчики на баттоны, при наведении и лива текст меняет цвет соответственно.
Но тут возникла проблема. Данные "мини-функции" занимают слишком много пространства в коде
Можно ли их как-то сократить? Есть альтернативное решение написать обработчик? Создать отдельный класс для этого всего?

private void label5_MouseEnter(object sender, EventArgs e)
        {
            label5.ForeColor = Color.FromArgb(35, 33, 61);
        }

        private void label5_MouseLeave(object sender, EventArgs e)
        {
            label5.ForeColor = Color.White;
        }

        private void label6_MouseEnter(object sender, EventArgs e)
        {
            label6.ForeColor = Color.FromArgb(35, 33, 61);
        }

        private void label6_MouseLeave(object sender, EventArgs e)
        {
            label6.ForeColor = Color.White;
        }

        private void label7_MouseEnter(object sender, EventArgs e)
        {
            label7.ForeColor = Color.FromArgb(35, 33, 61);
        }

        private void label7_MouseLeave(object sender, EventArgs e)
        {
            label7.ForeColor = Color.White;
        }

        private void label8_MouseEnter(object sender, EventArgs e)
        {
            label8.ForeColor = Color.FromArgb(35, 33, 61);
        }

        private void label8_MouseLeave(object sender, EventArgs e)
        {
            label8.ForeColor = Color.White;
        }
  • Вопрос задан
  • 315 просмотров
Решения вопроса 2
@Meloman19
Множество лейблов, которые при наведении делают одно и то же? Не проще ли создать всего один обработчик и на него привязать события со всех нужных лейблов?
private void label_MouseEnter(object sender, EventArgs e)
{
   (sender as Label).ForeColor = Color.FromArgb(35, 33, 61);
}

private void label_MouseLeave(object sender, EventArgs e)
{
   (sender as Label).ForeColor = Color.White;
}


Теперь во всех событиях указывает один и тот же обработчик.
Ответ написан
Griboks
@Griboks Куратор тега C#
Вариант 1: использовать лямбда-выражения.
Вариант 2: использовать генератор обработчиков
void Interactable(Control c)
{
c.MouseEnter+=(s,e)=>s.ForeColor=Color.FromArgb(35, 33, 61);
c.MouseLeave+=(s,e)=>s.ForeColor=Color.White;
}

Вариант 3: применить вариант 2 программно ко всем label'ам, которые каким-то образом помечены в визуальном конструкторе.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Nipheris
@Nipheris Куратор тега C#
Создать отдельный класс для этого всего?

Неплохая мысль. А ещё можно использовать WPF.
Ответ написан
@NonameProgrammer
Не знаю... А если (как вам уже говорили в прошлом вопросе) использовать массив лэйблов и к ним сделать обработчик событий? До этого создать массив (в соотвествии очередностью) с цветами и когда будет вызываться событие, то индекс массива будет перемещаться, тем самым меняя цвет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы