我找到了这个问题,但是它正在与XML文件一起使用,所以我真的不太了解发生了什么。
我要做的是获取要填充到for循环中的对象列表。现在我有这个:
for (int i = 0; i < dogs.Length; i++)
{
dogs[i] = new Dog();
}
dogs[0].PictureBox = picDog0;
dogs[1].PictureBox = picDog1;
dogs[2].PictureBox = picDog2;
dogs[3].PictureBox = picDog3;
我想做这样的事情:
for (int i = 0; i < dogs.Length; i++)
{
dogs[i] = new Dog();
dogs[i].PictureBox = StringToVariable("picDog" + i);
}
PictureBox
是属性字段,以防有所不同。
StringToVariable()是我不知道的事情。我什至不知道搜索它会叫什么。
没有一个好的,最小的,完整的代码示例,就不可能确定地说。但我希望以下语句在您的情况下能起作用:
dogs[i].PictureBox = (PictureBox)Controls.Find("picDog" + i, true)[0];
这将Form
依次搜索当前控件的子级(在这种情况下,我假设是您的子类)。这有些效率低下,因为它必须搜索每个项目的控件集合,但是只要您的项目数量相对较少,就很可能不是问题。
根据您Form
的设置方式,以下方法也可能起作用:
string prefix = "picDog";
foreach (PictureBox pictureBox in Controls.OfType<PictureBox>())
{
if (pictureBox.Name.StartsWith(prefix))
{
int index;
if (int.TryParse(pictureBox.Name.Substring(prefix.Length), out index))
{
dogs[index] = pictureBox;
}
}
}
该版本仅检查每个子控件一次,尝试解析附加到的初始文本的索引"picDog"
,如果成功,则使用该索引直接分配给您的数组。这样做的好处是可以很好地扩展到较大的控件列表,但在您的情况下可能会适得其反。
请注意,在以上两个示例中,我都没有进行任何错误检查。在任一示例中,您可能希望添加某种处理,以防在第一个示例中找不到所需的控件,或者在第二个示例中找不到无法解析的控件索引,或无法填写dogs
数组的元素之一。
如果由于某种原因上述两个示例均不适合您,请编辑您的文章,使其包含更好的代码示例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句