Изменение фона всех кнопок, кроме нажатой кнопки

Я работаю над формой, в которой много кнопок. Когда пользователь нажимает одну кнопку, фон должен изменить цвет. Если они нажмут другую кнопку в форме, ее фон должен изменить цвет, а цвет предыдущей кнопки должен вернуться к исходному цвету.

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

У меня есть это пока

foreach (Control c in this.Controls)
{
    if (c is Button)
    {
        if (c.Text.Equals("Button 2"))
         {
             Btn2.BackColor = Color.GreenYellow;
         }
         else
         {

         }
    }
}

Я могу изменить фон для Btn2. Как мне изменить фон для всех остальных кнопок в форме. Любые идеи, как я мог бы сделать это без необходимости жестко кодировать каждую кнопку.


person Inkey    schedule 22.01.2013    source источник
comment
Вы пробовали c.BackColor в другом?   -  person Ravi Y    schedule 22.01.2013


Ответы (2)


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

// Stores the previously-colored button, if any
private Button lastButton = null;

...

// The event handler for all button's who should have color-changing functionality
private void button_Click(object sender, EventArgs e)
{
    // Change the background color of the button that was clicked
    Button current = (Button)sender;
    current.BackColor = Color.GreenYellow;

    // Revert the background color of the previously-colored button, if any
    if (lastButton != null)
        lastButton.BackColor = SystemColors.Control;

    // Update the previously-colored button
    lastButton = current;
}
person Brett Wolfington    schedule 22.01.2013

Это будет работать, пока у вас нет управляющих контейнеров (например, панелей).

foreach (Control c in this.Controls)
{
   Button btn = c as Button;
   if (btn != null) // if c is another type, btn will be null
   {
       if (btn.Text.Equals("Button 2"))
       {
           btn.BackColor = Color.GreenYellow;
       }
       else
       { 
           btn.BackColor = Color.PreviousColor;
       }
   }
}
person stuartd    schedule 22.01.2013