【问题标题】:How to call similar named fields using a forloop如何使用 for 循环调用类似的命名文件
【发布时间】:2016-02-25 23:41:03
【问题描述】:

我已经制作了 20 个对象,比如说图片框。 图片框1 图片框2 图片框3 等等

我怎样才能编辑这些对象是一种自动化的方式? 我想做这样的事情:

for(int i = 0; i < boxcount; i++){
pictureBox[i].somevalue = true;
}

我怎样才能使它生成例如名称 pictureBox1.visible?

我尝试过使用:

图片框+i

【问题讨论】:

  • 不要拥有多个图片框,而是拥有一个数组/List&lt;T&gt; 或任何其他集合。
  • 你能给像我这样的用户举个例子吗?
  • 另外,如果您投反对票,请告诉我原因,我不会报复投票。我要提升自己!
  • 不知道为什么投反对票,似乎已经解释了需要什么以及什么尝试得很好
  • @Peterverleg,我没有投反对票,可能是因为人们认为它有些基本,我认为这是错误的。

标签: c#


【解决方案1】:

您不能使用代码生成变量的名称,然后取消引用该变量。相反,将变量存储在一个数组中并对其进行迭代:

PictureBox[] boxes = {pictureBox1, pictureBox2, pictureBox3, pictureBox4};

foreach(var box in boxes)
{
  box.somevalue = true;
}

【讨论】:

    【解决方案2】:
     var pictureBoxes = new List<PictureBoxes>() { new PictureBoxes {}, new PictureBoxes };
    
     foreach (var pb in pictureBoxes)
     {
        pb.Somevalue = "blah";
     }
    

    【讨论】:

      【解决方案3】:

      制作一个这样的图片框列表。 List&lt;PictureBox&gt; pictureBoxes = new List&lt;PictureBoxes&gt;();

      然后在循环中将这些框添加到列表中。然后你可以像pictureBoxes[x]一样访问

      循环类似于:

      List<PictureBox> pictureBoxes = new List<PictureBoxes>(); 
      for(int i=0; i < #of boxes you want; i++)
      {
          pictureBoxes.add(pictureBox(Your params that change));
      }
      

      【讨论】:

        【解决方案4】:

        我建议使用 Linq;如果所有感兴趣的PictureBox 都放在表单上,​​您可以实现这样的东西

          var boxes = Controls
            .OfType<PictureBox>()
            .Where(item => Regex.IsMatch(item.Name, "^pictureBox[0-9]+$"));
        
          foreach (var box in boxes)
            boxes.SomeValue = true;
        

        【讨论】:

          【解决方案5】:

          如果图片框都在同一个容器中,则另一种选择:

          foreach (Control c in this.Controls)
          {
               if (c is PictureBox)
               {
                    c.BackColor = Color.Red;
               }
          }
          

          【讨论】:

            【解决方案6】:

            如果你在 WinForms 上使用它(看起来你就是这样),你可以把它放在包含图片框的控件上:

            for (int i = 1; i <= boxCount; i++)
            {
                var b1 = $"pictureBox{i}";
                var b = this.Controls.Find(b1, false).First();
                b.Visible = false;
            }
            

            您需要在基本控件上找到控件,这不会检查基本控件上每个控件的子控件的子控件,但这可以为您提供所需的内容。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-08-16
              • 1970-01-01
              • 2021-12-01
              • 2021-12-24
              • 2010-12-29
              • 1970-01-01
              • 1970-01-01
              • 2021-12-09
              相关资源
              最近更新 更多