私は 6 つの Pictureboxes とfor
ループを持っています。for
ループ内でインクリメントされている「i」変数と同じ番号の PictureBox を参照したい。
たとえば、for
ループの 'i' 変数が 2 の場合、picturebox2 に画像を割り当てたいとします。
これを最も簡単な方法で行うにはどうすればよいですか? これは、他のコントロール (つまり、ラベル、テキスト ボックス) でも機能するユニークな方法です。:)
コントロールへの参照を配列に入れます。
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
して、追加情報 (画像名やインデックスなど) を提供できます。たとえば、pictureBox のインデックスを指定できます。また、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);
別のオプション - すべての pictureBoxes のような名前がある場合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);
}
}
}
}