как отключить цвет кнопки в c # - PullRequest
1 голос
/ 15 мая 2019

У меня есть набор из 5 кнопок, которые я создал в winforms, используя c #, если я нажимаю кнопку 1, она должна смениться на зеленый цвет. Затем, если кнопка 2 нажата, то она должна измениться на зеленую., Но кнопка 1 должна измениться на своюоригинальный цвет.

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            {
                button1.BackColor = Color.Green;
                button2.BackColor = Color.Lavender;
                button3.BackColor = Color.Lavender;
                button4.BackColor = Color.Lavender;
                button5.BackColor = Color.Lavender;
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            button1.BackColor = Color.Lavender;
            button2.BackColor = Color.Green;
            button3.BackColor = Color.Lavender;
            button4.BackColor = Color.Lavender;
            button5.BackColor = Color.Lavender;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            button1.BackColor = Color.Lavender;
            button2.BackColor = Color.Lavender;
            button3.BackColor = Color.Green;
            button4.BackColor = Color.Lavender;
            button5.BackColor = Color.Lavender;
        }
    }
}

но этот код будет беспокойным, если у меня много кнопок. Пожалуйста, помогите мне с этим.

Ответы [ 2 ]

5 голосов
/ 15 мая 2019

Вы можете создать отдельный обработчик события и назначить его для события Click для всех ваших кнопок:

private void ButtonClickHandler(object sender, EventArgs e)
{
    // iterate over all buttons on form
    foreach (var button in Controls.OfType<Button>())
        button.BackColor = button == sender ? Color.Green : Color.Lavender;
}

Как указано в комментарии @CharlesMay, имейте в виду, что этот код найдет все без исключенияButton это прямое дитя вашей формы.Есть несколько способов избежать этого:

1.Удерживайте кнопки в контейнере. Например, создайте Panel (скажем, myPanel) и поместите все эти кнопки на эту панель, а затем переберите элементы управления этой панели:

foreach (var button in myPanel.Controls.OfType<Button>())

2.Сохраните свою активную кнопку в закрытом поле. Таким образом, вам не нужно вообще перебирать элементы управления:

private Button _activeButton = null;

private void ButtonClickHandler(object sender, EventArgs e)
{
    // disable previosly active button
    if (_activeButton != null) _activeButton.BackColor = Color.Lavender;
    // set new button
    _activeButton = sender as Button;
    // enable currently active button
    if (_activeButton != null) _activeButton.BackColor = Color.Green;
}
1 голос
/ 15 мая 2019

Вы можете сделать это так:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void SetActive(Button active)
        {
            foreach(var btn in new[] {button1, button2, button3, button4, button5})
            {
               btn.BackColor = btn == active ? Color.Green : Color.Lavender;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            SetActive(button1);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            SetActive(button2);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            SetActive(button3);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...