2011-03-21 53 views
1

对,在Windows窗体中,我创建了一个包含100个图片框的网格。点击一个图片框后,它会变成绿色,如果再次点击它将会回到初始颜色。重新使用for循环中的对象名称?

为了保存这些我已经把每个图片框状态放入一个布尔数组[100]。这些将使用序列化保存在XML中。 (如果绿色则为true,如果为白色则为false(默认))。

加载时我需要使用bool数组并定义每个picturebox的状态。图片框的名称是pictureBox1,pictureBox2,pictureBox3等 有没有一个方便的方法来做到这一点?

也许你可以这样更好地了解我:

for (int i = 0; i < 100; i++) { 
    if (pictureBoxes[i] == true) //pictureBoxes[] is the bool[] loaded 
    { 
     **pictureBox+i** .BackColor== System.Drawing.Color.LawnGreen; 
    } 
    else if (pictureBoxes[i] == false) 
    { 
     //System.Drawing.Color.White; 
    } 
} 

这个例子不工作;请帮忙?

+3

您不应该使用设计器创建图片框,而是在表单的构造函数(或Load事件)中使用for循环。然后你可以将它们全部存储在一个图片框数组中,并像'pictureBoxControls [i]'一样访问它。 – Justin 2011-03-21 18:24:52

+0

为什么不使用背景颜色作为“布尔”?即。 'if(picturebox [i] .BackColor == System.Drawing.Color.LawnGreen){'(请参阅如何实际获取对象的答案。) – 2011-03-21 18:29:59

回答

-1

Controls.Find()

这种方式实际上是比其他人更安全,因为我相信,如果控制不存在,不是一个错误将被抛出。此方法检查,以确保在表格上存在控制:

var controls = this.Controls.Find("pictureBox"+i, true); 
if (controls.Length > 0) 
{ 
    foreach (var control in controls) 
    { 
     control.BackColor = Color.LawnGreen; 
    } 
} 
+3

我希望您计划详细说明。 – 2011-03-21 18:27:19

+1

这是关联的,不需要详细说明,对吧?链接的页面解释了它。 – 2011-03-21 18:29:01

+0

@Josh M. - 如果所有的OP都想要一个链接,他们可以去谷歌。 StackOverflow最大的好处之一是它可以让你彻底和完全地回答一个特定的问题。在我看来,发布单一链接既懒惰又违背了我们在SO上尝试做的事情。另外,举例来说,如果微软明天将此页面移动到另一个网址,并且其他人正试图找到相同问题的答案。这个答案绝对没有帮助。所有它需要解决它是:尝试'Controls.Find(“pictureBox”+我).BackColor = Color.LawnGreen;' – 2011-03-21 18:51:30

4

好了,直接回答你的问题是在对图像 - 母公司控制的Controls财产(一ControlCollection)使用indexer by name框。

假设你的代码是在父(可能的形式)的实例方法运行时,你可以这样做:

// Cast to PictureBox if you need to set a picture-box-specific property. 
Controls["pictureBox" + i].BackColor = Color.LawnGreen; 

更一般地,你可以这样做:

parentControl.Controls["pictureBox" + i].BackColor = Color.LawnGreen; 

但如何你是否遇到过奇怪的情况,你有一组bools,每个成员都通过一些命名约定与特定的图片框相关联?如果通过设计师手动将100个图片框拖到表单上,您可能会给自己一个不必要的头痛。有可能这样设计得更好;有了更多的信息,我们可能能够为您提供更清洁的解决方案。

+0

感谢您的回复。我仍然是C#的初学者。我试图制作电影院系统,用户可以选择座位。座位以图片框表示..如果拍摄它将变成绿色,如果不是白色的话。 是的,我没有手动拖动100个文本框。 – 2011-03-21 18:48:16

+0

@ user669910:干杯。贾斯汀的评论是一个很好的起点。 :) – Ani 2011-03-21 18:57:15

+0

当'Controls [“pictureBox”+ i]'不存在时会发生什么?它不会抛出一个错误? – Martin 2011-03-21 19:06:38

0

只是一个建议,不知道这是否有助于(甚至工作) 创建从图片框类派生的新类,并通过添加布尔变量扩展。并在构造函数中传递boolean作为参数并根据它改变背景颜色。 并且不要忘记将这个新类标记为[Serializable]