是的,在Windows窗体中,我创建了一个包含100个图片框的网格。单击图片框后,它将变为绿色,如果再次单击,它将变回初始颜色。
为了保存这些,我把每个图片框状态放入一个bool [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;
}
}
此示例不起作用;请帮帮忙?
答案 0 :(得分:4)
嗯,您问题的直接答案是在图片框的父控件上使用Controls
属性indexer by name(ControlCollection
)。
假设您的代码在父代的实例方法(可能是表单)中运行,您可以这样做:
// 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个图片框拖到表格上,您可能会给自己带来不必要的麻烦。它可能设计得更好;通过更多信息,我们可以为您提供更清洁的解决方案。
答案 1 :(得分:0)
只是一个建议,不确定它是否有帮助(甚至是否有效) 创建一个派生自PictureBox类的新类,并通过添加布尔变量来扩展它。并在构造函数中传递boolean作为参数并根据它更改背景颜色。 并且不要忘记将这个新类标记为[Serializable]
答案 2 :(得分:-1)
这种方式实际上比其他方式更安全,因为我相信如果控件不存在,则会抛出错误。此方法检查以确保表单上存在控件:
var controls = this.Controls.Find("pictureBox"+i, true);
if (controls.Length > 0)
{
foreach (var control in controls)
{
control.BackColor = Color.LawnGreen;
}
}