我需要在一个周期内处理很多图片框。我怎样才能做到这一点?我试过这个:
for (int i = 1; i <= 10; i++)
{
PictureBox[] pb = new PictureBox[i];
pb[i].Image = global::Ippodrom.Properties.Resources.horse;
}
但它崩溃了:
An unhandled exception of type 'System.IndexOutOfRangeException' occurred in Ippodrom.exe
Additional information: Index was outside the bounds of the array.
我该怎么办?
UPD:我需要更改已创建的图片框中的图片,而不是创建新的图片框。
答案 0 :(得分:2)
您需要在表单上循环显示现有的图片框。
此过程假定您在表单上有图片框而不是在另一个容器中,例如面板。如果是这样,请相应地调整此代码:
foreach (PictureBox pb in this.Controls.OfType<PictureBox>()) {
pb.Image = global::Ippodrom.Properties.Resources.horse;
}
答案 1 :(得分:0)
你想要的是创建一个10个PictureBox的数组并初始化它们。
您所做的是创建10个大小为N的数组,其中N为[1..10]
。
首先创建一个数组:
PictureBox[] pb = new PictureBox[10];
现在你有一个包含10个PixtureBox引用的数组。它们中的每一个都保持值'null'。
for (int i = 0; i < 10; i++) // C# arrays are zero-indexed, not one
{
// Create a new PictureBox and assign it to the array
pb[i] = new PictureBox();
// Assign an image to this new PictureBox
pb[i].Image = global::Ippodrom.Properties.Resources.horse;
}
发生IndexOutOfRangeException是因为你使用了一个基于索引的索引而不是零,但代码开头有缺陷,所以它不相关。
答案 2 :(得分:0)
如果您创建PictureBox数组,则不会创建任何实例。您只需声明“space”来保存对实例的引用。
我猜你要做的就是这个(但我可能错了)
PictureBox[] pb = new PictureBox[10]; // creates space for 10 elements, first one is 0
for(int i = 0; i < 10; i++) { // from 0..9
pb[i] = new PictureBox(); // we create the actual thing
pb[i].Image = global::Ippodrom.Properties.Resources.horse;
}
在这里使用List可能要容易得多
IList<PictureBox> pb = new List<PictureBox>();
for(int i = 0; i < 10; i++) { // if you want exactly 10
var theBox = new PictureBox();
theBox.Image = global::Ippodrom.Properties.Resources.horse;
pb.add(theBox);
}
如果你想改变它们
IList<PictureBox> pb = new List<PictureBox>() { pictureBox1 /* etc */ };
foreach(PictureBox p in pb) {
p.Image = global::Ippodrom.Properties.Resources.horse;
}
如果您希望Control中的每个Picturebox都使用by LarsTech :)