我的项目中有很多图片框,想知道是否有代码可以在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;
有可能吗?欢迎任何代码。
答案 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,但你得到了主要的想法