减少类似的命令

时间:2010-06-01 01:32:28

标签: c#

如何将类似命令的数量减少到循环中?

这样的东西
pictureBox7.BackColor = Color.FromArgb(187, 187, 187);
pictureBox9.BackColor = Color.FromArgb(187, 187, 187);
pictureBox10.BackColor = Color.FromArgb(187, 187, 187);
pictureBox11.BackColor = Color.FromArgb(187, 187, 187);
pictureBox12.BackColor = Color.FromArgb(187, 187, 187);
pictureBox13.BackColor = Color.FromArgb(187, 187, 187);

5 个答案:

答案 0 :(得分:3)

var pics = new PictureBox[] {pictureBox7, 
                             pictureBox8, 
                             pictureBox9, 
                             pictureBox10, etc... };, 
pics.ToList().ForEach(p => p.BackColor = Color.FromArgb(187, 187, 187));

答案 1 :(得分:3)

正如其他答案所暗示的那样,您需要将要执行相同操作的控件收集到某种List中,然后您可以循环它以将所有控件设置为相同的值。执行此操作的一种好方法是使用一种方法将控件添加到私有列表,然后使用另一种方法将任何操作应用于列表中的每个控件。这使您可以在以后轻松添加更多内容,而无需深入挖掘代码或进行过多的copy-n-paste编码。

执行此操作后,您可以停止命名控件Control##,并开始为其提供实际的描述性名称,以确定其用途。在一个正在工作的项目中自动命名控件是一个糟糕的想法,因为稍后你会试图记住pictureBox28实际上是为了什么,而在pictureBoxPreview有一个稍微明显的原因存在。

答案 2 :(得分:2)

Color color = Color.FromArgb(187, 187, 187);
foreach (Control ctrl in this.Controls)
{
    if (ctrl is PictureBox) // don't get me started on is vs. as
    {
        PictureBox pb = (PictureBox)ctrl;
        pb.BackColor = color;
    }
}

答案 3 :(得分:1)

PictureBox[] pbs = new PictureBox[]{ pictureBox1, pictureBox2, ...};
for(int i = 0; i < pbs.Length; i++) pbs[i].BackColor = Color.FromARGB(187,187,187)

答案 4 :(得分:1)

您可以执行以下操作。注意,语法可能不完美,但你明白了。

foreach(var pb in new PictureBox[] {pictureBox7, pictureBox9, pictureBox10, pictureBox11, pictureBox12, pictureBox13})
    pb.BackColor = Color.FromArgb(187, 187, 187);