1

私のプロジェクトには多くのピクチャボックスがあり、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;

出来ますか?どんなコードでも大歓迎です。

4

5 に答える 5

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;
    }
}
于 2012-07-18T22:16:05.377 に答える
0

それらをリストに追加し、 aList<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)
{
    //....
}
于 2012-07-18T22:20:20.643 に答える
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;
于 2012-07-18T22:21:36.150 に答える
0

ピクチャ ボックスのリストを作成したい場合があります。次に、次のようなものを書くことができますpictureBoxes[0].Image=img;

于 2012-07-18T22:19:08.817 に答える
-1
while(n <= (number of pics)){
n++
pictureBox(n).Image = slagalica.Properties.Resources.grn_tick;
}

はい、これがObjective-Cであることは知っていますが、主なアイデアはわかります

于 2012-07-18T22:16:48.513 に答える