2016-02-25 17 views
1

我製作了20個對象,可以說,pictureBoxes。 pictureBox1 pictureBox2 pictureBox3 等如何使用forloop調用類似的命名字段

我怎麼可以編輯這些對象是一個自動化的方式? 我想要做財產以後這樣的:

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

我怎樣才能讓這個例如生成名稱pictureBox1.visible?

我已經嘗試使用:

圖片框+我

+11

而不是有多個pictureBoxes,有一個數組/列表#'或任何其他集合。 – Habib

+0

您能否像我這樣的用戶展示一個例子? –

+0

另外,如果你downvote請告訴我爲什麼,我不會復仇投票。我想改善我的自我! –

回答

5

不能使用代碼來生成一個變量的名稱,然後解引用變量。取而代之的是,存儲在數組中的變量和遍歷它:

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"; 
} 
1

做出這樣的圖片框的列表。 List<PictureBox> pictureBoxes = new List<PictureBoxes>();

然後在循環中將這些框添加到列表中。然後,您可以訪問諸如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)); 
} 
1

我建議使用的LINQ;如果所有感興趣的PictureBox被放置在表單上可以實現這樣的

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

    foreach (var box in boxes) 
    boxes.SomeValue = true; 
0

替代的財產以後,如果pictureboxes都在同一個容器:

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

如果你在的WinForms使用的(這看起來你是)你可以把它放在包含圖片框的控件上:

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

你需要找到基本控件上的控件a nd這並不會檢查每個控件的子控件在基礎控件上的子元素,但是這可以讓你得到你想要的。