Usuário com melhor resposta
Código menor.

Pergunta
-
// como fazer o código abaixo ficar menor? private void button1_Click(object sender, System.EventArgs e) { if (button1.BackColor == Color.Red) { button1.BackColor = Color.LimeGreen; } else { button1.BackColor = Color.Red; } } // continua até o button36 private void button36_Click(object sender, System.EventArgs e) { if (button36.BackColor == Color.Red) { button36.BackColor = Color.LimeGreen; } else { button36.BackColor = Color.Red; } } private void but_reset_Click(object sender, System.EventArgs e) { button1.BackColor = Color.Silver; button2.BackColor = Color.Silver; button3.BackColor = Color.Silver; button4.BackColor = Color.Silver; button5.BackColor = Color.Silver; button6.BackColor = Color.Silver; button7.BackColor = Color.Silver; button8.BackColor = Color.Silver; button9.BackColor = Color.Silver; button10.BackColor = Color.Silver; button11.BackColor = Color.Silver; button12.BackColor = Color.Silver; button13.BackColor = Color.Silver; button14.BackColor = Color.Silver; button15.BackColor = Color.Silver; button16.BackColor = Color.Silver; button17.BackColor = Color.Silver; button18.BackColor = Color.Silver; button19.BackColor = Color.Silver; button20.BackColor = Color.Silver; button21.BackColor = Color.Silver; button22.BackColor = Color.Silver; button23.BackColor = Color.Silver; button24.BackColor = Color.Silver; button25.BackColor = Color.Silver; button26.BackColor = Color.Silver; button27.BackColor = Color.Silver; button28.BackColor = Color.Silver; button29.BackColor = Color.Silver; button30.BackColor = Color.Silver; button31.BackColor = Color.Silver; button32.BackColor = Color.Silver; button33.BackColor = Color.Silver; button34.BackColor = Color.Silver; button35.BackColor = Color.Silver; button36.BackColor = Color.Silver; }
Respostas
-
Uma idéia legal para o botão reset é criar um flag para identificar todos os botoes que queira gerenciar, exemplo, existe uma propriedade do botão "Tag", atribua o valor -1, após isso seu código poderia ficar assim:
private void but_reset_Click(object sender, System.EventArgs e) { var buttos = this.GetComponents(this, typeof(Button)); buttos.ToList().ForEach(ctrl => { if (ctrl.Tag.Equals("-1")) { ctrl.BackColor = Color.Silver; } }); } public IEnumerable<Control> GetComponents(Control control, Type type) { var controls = control.Controls.Cast<Control>(); return controls.SelectMany(ctrl => GetComponents(ctrl, type)) .Concat(controls) .Where(c => c.GetType() == type); }
espero ter ajudado!- Marcado como Resposta Filipe B CastroModerator quarta-feira, 28 de fevereiro de 2018 21:00
Todas as Respostas
-
Se sempre o código do click for o mesmo, você pode associar o evento Click a um mesmo método, não há necessidade de gerar um diferente. Daí o código do método ficaria:
private void OnButtonClick(object sender, System.EventArgs e) { Button button = (Button) sender; button.BackColor = button.BackColor == Color.Red ? Color.LimeGreen : Color.Red; }
E para o botão reset:
private void but_reset_Click(object sender, System.EventArgs e) { for (int i = 1; i <= 36; i++) { Control ctl = this.Controls.Find("button" + i, true).FirstOrDefault(); ctl.BackColor = Color.Silver; } }
Juliano Nunes - http://linkedin.com/in/julianonunes
Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.
Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.
- Sugerido como Resposta Gabriel_Vinicius terça-feira, 27 de fevereiro de 2018 12:30
-
Caso não faça assim pode diminuir as linhas de código dentro de cada método "buttonClick" retirando as chaves do IF, e do else, se não me engano quando um if/else/else if possui só uma linha de comando, como no seu caso não há necessidade de uso das chaves. Porém o uso de vários métodos ao meu ver só teria utilizado se os botões mudassem para cores diferentes ao invés de todos para lime green.
private void button1_Click(object sender, System.EventArgs e) { if (button1.BackColor == Color.Red) { button1.BackColor = Color.LimeGreen; } else { button1.BackColor = Color.Red; } }
Mudei isso por isso :
private void button1_Click(object sender, System.EventArgs e) { if (button1.BackColor == Color.Red) button1.BackColor = Color.LimeGreen; else button1.BackColor = Color.Red; }
- Editado Gabriel_Vinicius terça-feira, 27 de fevereiro de 2018 12:32
-
Uma idéia legal para o botão reset é criar um flag para identificar todos os botoes que queira gerenciar, exemplo, existe uma propriedade do botão "Tag", atribua o valor -1, após isso seu código poderia ficar assim:
private void but_reset_Click(object sender, System.EventArgs e) { var buttos = this.GetComponents(this, typeof(Button)); buttos.ToList().ForEach(ctrl => { if (ctrl.Tag.Equals("-1")) { ctrl.BackColor = Color.Silver; } }); } public IEnumerable<Control> GetComponents(Control control, Type type) { var controls = control.Controls.Cast<Control>(); return controls.SelectMany(ctrl => GetComponents(ctrl, type)) .Concat(controls) .Where(c => c.GetType() == type); }
espero ter ajudado!- Marcado como Resposta Filipe B CastroModerator quarta-feira, 28 de fevereiro de 2018 21:00