我有六个图片框和一个for
循环。for
我想使用与循环内递增的“i”变量相同的数字来引用 PictureBox 。
例如,如果for
循环中的“i”变量是 2,我想将图像分配给图片框 2。
我如何以最简单的方式做到这一点?这是一种独特的方式,也适用于其他控件(即标签、文本框)会很好。:)
将对控件的引用放入数组中:
PictureBox[] boxes = {
PictureBox1, PictureBox2, PictureBox3, PictureBox4, PictureBox5, PictureBox6
};
然后你可以遍历它们:
for (int i = 0; i < boxes.Length; i++) {
// use boxes[i] to access each picture box
}
您可以使用Tag
任何控件的属性来提供附加信息(如图像名称或索引)。例如,您可以为您的图片框提供索引。还使用 ImageList 来存储图像列表:
foreach(var pictureBox in Controls.OfType<PictureBox>())
{
if (pictureBox.Tag == null) // you can skip other pictureBoxes
continue;
int imageIndex = (int)pictureBox.Tag;
pictureBox.Image = imageList.Images[imageIndex];
}
您也可以按标签值搜索图片框:
var pictureBox = Controls.OfType<PictureBox>()
.FirstOrDefault(pb => (int)pb.Tag == index);
另一种选择 - 如果所有图片框的名称都像pictureBox{index}
. 在这种情况下,您可以不使用标签:
var pictureBox = Controls
.OfType<PictureBox>()
.FirstOrDefault(pb => Int32.Parse(pb.Name.Replace("pictureBox", "")) == index);
我用 Array of PictureBoxes 实现了这一点:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace ImageChanger
{
public partial class Form1 : Form
{
PictureBox[] pictureBoxs=new PictureBox[4];
public Form1()
{
InitializeComponent();
pictureBoxs[0] = pictureBox1;
pictureBoxs[1] = pictureBox2;
pictureBoxs[2] = pictureBox3;
pictureBoxs[3] = pictureBox4;
}
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 4; i++)
{
// Load Image from Resources
pictureBoxs[i].Image = Properties.Resources.img100;
Application.DoEvents();
Thread.Sleep(1000);
}
}
}
}