首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自行车画盒

自行车画盒
EN

Stack Overflow用户
提问于 2012-04-11 17:23:38
回答 3查看 941关注 0票数 0

我需要在一个周期内处理很多画框。我该怎么做?我试过这个:

代码语言:javascript
复制
    for (int i = 1; i <= 10; i++)
    {
        PictureBox[] pb = new PictureBox[i];
        pb[i].Image = global::Ippodrom.Properties.Resources.horse;
    }

但它坠毁的原因是:

代码语言:javascript
复制
An unhandled exception of type 'System.IndexOutOfRangeException' occurred in Ippodrom.exe

Additional information: Index was outside the bounds of the array.

怎么办?

UPD:我需要更改已创建的picturebox中的图片,而不是创建一个新的picturebox。

EN

回答 3

Stack Overflow用户

发布于 2012-04-11 18:00:03

您需要遍历窗体上现有的图片框。

此过程假定窗体上有图片框,而不是在另一个容器中,例如面板中。如果是这样,则相应地调整此代码:

代码语言:javascript
复制
foreach (PictureBox pb in this.Controls.OfType<PictureBox>()) {
  pb.Image = global::Ippodrom.Properties.Resources.horse;
}
票数 2
EN

Stack Overflow用户

发布于 2012-04-11 17:38:44

您想要的是创建一个10 PictureBox的数组,并初始化每个数组。

您所做的是创建10个数组,每个数组的大小为N,其中N为[1..10]

首先创建一个数组:

代码语言:javascript
复制
PictureBox[] pb = new PictureBox[10];

现在您有了一个由10个PixtureBox引用组成的数组。它们中的每个都保存'null‘值。

代码语言:javascript
复制
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之所以出现,是因为您使用的是一个基于一个的索引,而不是零,但是代码一开始就有缺陷,所以它不相关。

票数 0
EN

Stack Overflow用户

发布于 2012-04-11 17:45:03

如果创建PictureBox数组,则不会创建任何实例。您只声明"space“来保存对实例的引用。

我猜你想做的就是这个(但我可能错了)

代码语言:javascript
复制
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;
}

在这里使用列表可能要容易得多

代码语言:javascript
复制
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);
}

如果你想改变它们

代码语言:javascript
复制
IList<PictureBox> pb = new List<PictureBox>() { pictureBox1 /* etc */ };
foreach(PictureBox p in pb) {
    p.Image = global::Ippodrom.Properties.Resources.horse;
}

如果希望控件中的每个图片框都与by LarsTech :)一起使用

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10110873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档