C# 减少类似命令

C# 减少类似命令,c#,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); picture

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

差不多

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);
您可以执行以下操作。注意,语法可能并不完美,但你已经明白了

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

正如其他答案所暗示的那样,您需要将要对其执行相同操作的控件收集到某种列表中,然后可以在其上循环以将所有控件设置为相同的值。这样做的一个好方法是使用一个方法将控件添加到私有列表,然后使用另一个方法将任何操作应用到列表中的每个控件。这允许您以后轻松添加更多内容,而无需深入研究代码或执行过多的复制粘贴编码


一旦您这样做了,您就可以停止为控件命名,并开始给它们实际的描述性名称,说明它们的用途。在一个正在工作的项目中自动命名控件是个坏主意,因为稍后您将试图记住pictureBox28的实际用途,而PictureBoxReview的存在有一个更明显的原因。

稍后会添加什么?如果你打算以后再提供更多细节,为什么现在要问一个问题?我出人意料地急于离开。你能不能打个电话给OfType简化一下?lc是怎么说的。不管怎么说,用as而不是is会更好:PMust。。。打仗催促到辩论是对。。。像相反,我会回应lc说,我永远不会写一个像这样愚蠢的@&$*@函数来遍历pictureboxes。如果我想遍历一个PictureBox列表,我会遍历一个PictureBox列表。好吧,我放弃了。我刚刚写了一首小诗来纪念is和as的争论:若as比is好,为什么会有呢?为什么要创建一个数组来直接列出它呢?为什么不从一开始就列出一个清单呢?var pics=新列表{/*…*/};我投票赞成将控件命名约定称为散光命名我认为命名约定是Alan Cooper的错-他要么是用最初的Visual Basic发明的,要么是通过VB到Visual Interdev再到Visual Studio帮助将其普及。如果Cooper刚刚编写了VB设计器,强制程序员为每个控件输入一个名称,我们会多么高兴呢?在IDE自动生成控件的情况下,拥有单独的控件对象和将这些对象添加到列表中的方法会很有用。
var pics = new PictureBox[] {pictureBox7, 
                             pictureBox8, 
                             pictureBox9, 
                             pictureBox10, etc... };, 
pics.ToList().ForEach(p => p.BackColor = Color.FromArgb(187, 187, 187));
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;
    }
}
foreach(var pb in new PictureBox[] {pictureBox7, pictureBox9, pictureBox10, pictureBox11, pictureBox12, pictureBox13})
    pb.BackColor = Color.FromArgb(187, 187, 187);