我需要在一个周期内处理很多画框。我该怎么做?我试过这个:
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:我需要更改已创建的picturebox中的图片,而不是创建一个新的picturebox。
发布于 2012-04-11 18:00:03
您需要遍历窗体上现有的图片框。
此过程假定窗体上有图片框,而不是在另一个容器中,例如面板中。如果是这样,则相应地调整此代码:
foreach (PictureBox pb in this.Controls.OfType<PictureBox>()) {
pb.Image = global::Ippodrom.Properties.Resources.horse;
}发布于 2012-04-11 17:38:44
您想要的是创建一个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之所以出现,是因为您使用的是一个基于一个的索引,而不是零,但是代码一开始就有缺陷,所以它不相关。
发布于 2012-04-11 17:45:03
如果创建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;
}在这里使用列表可能要容易得多
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;
}如果希望控件中的每个图片框都与by LarsTech :)一起使用
https://stackoverflow.com/questions/10110873
复制相似问题