如何在图片盒之间切换?

时间:2012-07-18 22:13:37

标签: c# winforms picturebox

我的项目中有很多图片框,想知道是否有代码可以在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;

有可能吗?欢迎任何代码。

5 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分:0)

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

这样的东西了

答案 2 :(得分:0)

将它们添加到列表并使用索引器,例如List<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)
{
    //....
}

答案 3 :(得分: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;

答案 4 :(得分:-1)

while(n <= (number of pics)){
n++
pictureBox(n).Image = slagalica.Properties.Resources.grn_tick;
}

是的我知道这是Objective-C,但你得到了主要的想法