使用';对于';在C#中循环以填充图片框编号';i';有形象

使用';对于';在C#中循环以填充图片框编号';i';有形象,c#,loops,for-loop,controls,C#,Loops,For Loop,Controls,我有六个PictureBox和一个for循环。我想引用PictureBox,其编号与在for循环中递增的'I'变量相同 例如,如果我的For循环中的'i'变量为2,我希望将图像分配给picturebox2 我怎样做才是最简单的方法?这是一种独特的方式,也适用于其他控件(即标签、文本框),这很好。:) 将对控件的引用放入数组中: PictureBox[] boxes = { PictureBox1, PictureBox2, PictureBox3, PictureBox4, PictureB

我有六个PictureBox和一个
for
循环。我想引用PictureBox,其编号与在
for
循环中递增的'I'变量相同

例如,如果我的
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
}
for(int i=0;i
您可以使用任何控件的
标记
属性来提供附加信息(如图像名称或索引)。例如,您可以为图片库提供索引。还可以使用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];
}

我使用PictureBox数组来实现这一点:

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


    }
}
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用系统线程;
使用System.Windows.Forms;
名称空间图像转换器
{
公共部分类Form1:Form
{
PictureBox[]pictureBoxs=新的PictureBox[4];
公共表格1()
{
初始化组件();
pictureBoxs[0]=pictureBox1;
pictureBoxs[1]=pictureBox2;
pictureBoxs[2]=pictureBox3;
pictureBoxs[3]=pictureBox4;
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
对于(int i=0;i<4;i++)
{
//从资源中加载图像
pictureBoxs[i].Image=Properties.Resources.img100;
Application.DoEvents();
睡眠(1000);
}
}
}
}

我以前尝试过这个方法,但我得到了
错误2当前上下文中不存在名称“PictureBox2”
@HolyGate-这个答案可以-但是您可能需要使用
PictureBox2
而不是
PictureBox2
来定义数组。注意camel case和pascal case之间的区别。@HolyGoat:检查控件的id到底是什么。如果可以访问
PictureBox1
,但不能访问
PictureBox2
,则表明范围正确,但实际上没有任何id为
PictureBox2
的图片框。我理解imagelist的想法,我不知道如何使用tag属性,即如果for循环迭代器=3,则使用image填充picturebox3。有两个选项-从code
pictureBox1.tag=1提供标记,或从designer提供标记-选择pictureBox并设置其标记属性。但在第二种情况下,标签将包含字符串!请小心。拉齐贝佐夫茨基有点不相关:你能用Visual C++的标签提供代码吗?感谢you@AlaaM. 不幸的是,我上次使用C++是在10年前。因此,我认为您将比我更好地处理此任务:)我以前尝试过此操作,但我得到
错误2当前上下文中不存在名称“PictureBox2”
var pictureBox = Controls
  .OfType<PictureBox>()                     
  .FirstOrDefault(pb => Int32.Parse(pb.Name.Replace("pictureBox", "")) == index);
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);
            }
        }


    }
}