2012-07-18 197 views
1

我已经在我的项目很多pictureboxes,并想知道是否有代码,可以很容易在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; 

这可能吗?任何代码是受欢迎的。

+1

你究竟想要做什么?分配相同的图像到所有的图片框?或者只有38和39? – svick 2012-07-18 22:26:50

回答

1

你可以通过所有的控制循环,并设置应用到这些,这是pictureboxes:

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

或者,您可以创建自定义图片框,并使用它,而不是默认pictureboxes:

public class SlagalicaPictureBox : PictureBox 
{ 
    public SlagalicaPictureBox() 
    { 
     Image = slagalica.Properties.Resources.grn_tick; 
    } 
} 
-1
while(n <= (number of pics)){ 
n++ 
pictureBox(n).Image = slagalica.Properties.Resources.grn_tick; 
} 

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

0

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

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); 
} 

现在CA通过索引来访问的照片,例如:

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) 
{ 
    //.... 
} 
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;