none
Código menor. RRS feed

  • 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;
            }

    terça-feira, 27 de fevereiro de 2018 01:16

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!
    terça-feira, 27 de fevereiro de 2018 15:02

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
    terça-feira, 27 de fevereiro de 2018 11:50
  • 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;
            }


    terça-feira, 27 de fevereiro de 2018 12:30
  • 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!
    terça-feira, 27 de fevereiro de 2018 15:02