1

我的项目中有很多图片框,想知道是否有代码可以在 C# 中轻松切换它们,例如:

// I dont' want to have to do this all the time
pictureBox38.Image = slagalica.Properties.Resources.grn_tick;
pictureBox39.Image = slagalica.Properties.Resources.grn_tick;

// I want something like this
int n = 38
pictureBox(n).Image = slagalica.Properties.Resources.grn_tick;
pictureBox(n+1).Image = slagalica.Properties.Resources.grn_tick;

是否可以?欢迎任何代码。

4

5 回答 5

1

您可以遍历所有控件并将设置应用于那些是图片框:

foreach(Control control in Controls)
{
   if (control is PictureBox)       
      ((PictureBox)control).Image = slagalica.Properties.Resources.grn_tick;
}

或者您可以创建自定义图片框并使用它来代替默认图片框:

public class SlagalicaPictureBox : PictureBox
{
    public SlagalicaPictureBox()
    {
        Image = slagalica.Properties.Resources.grn_tick;
    }
}
于 2012-07-18T22:16:05.377 回答
0

您可能想要创建图片框列表。然后你就可以写出类似的东西pictureBoxes[0].Image=img;

于 2012-07-18T22:19:08.817 回答
0

将它们添加到列表并使用索引器,例如 aList<PictureBox>PictureBox[]

var dir = new System.IO.DirectoryInfo(imagePath);
List<FileInfo> images = dir.GetFiles("*.jpg", System.IO.SearchOption.AllDirectories).ToList();
List<PictureBox> pictures = new List<PictureBox>();
foreach (FileInfo img in images) {
    PictureBox picture = new PictureBox();
    picture.Image = Image.FromFile(img.FullName);
    pictures.Add(picture);
}

现在您可以按索引访问图片,例如:

var rnd = new Random();
int imgIndex = rnd.Next(0, 38);
PictureBox img = pictures[imgIndex];

或者在一个循环中

for(int i=0; i<38; i++)
{
    PictureBox img = pictures[i];
}

编辑:如果您只想 PictureBoxes在表单上查找所有内容,则可以使用Enumerable.OfType哪些过滤器并相应地转换控件:

IEnumerable<PictureBox> allPictures = this.Controls.OfType<PictureBox>();
foreach(var pic in allPictures)
{
    //....
}
于 2012-07-18T22:20:20.643 回答
0

一定要考虑 Lazyberezovsky 的帖子。但是,如果您想快速迭代控件,您也可以构造一个控件数组。

您可以轻松地做到这一点:

List<PictureBox> list = new List<PictureBox>();
list.Add(pictureBox38);
list.Add(pictureBox39);

然后您可以按如下方式遍历它们:

foreach (PictureBox pb in list) {
    pictureBox.Image = slagalica.Properties.Resources.grn_tick;
}

如果你想更聪明一点,你甚至可以创建一个指定大小的数组并做同样的事情。

PictureBox[] pb_array = new PictureBox[50];
pb_array[38] = pictureBox38;
于 2012-07-18T22:21:36.150 回答
-1
while(n <= (number of pics)){
n++
pictureBox(n).Image = slagalica.Properties.Resources.grn_tick;
}

是的,我知道这是 Objective-C,但你明白了主要思想

于 2012-07-18T22:16:48.513 回答