C#表单控件

C#表单控件,c#,winforms,C#,Winforms,我有一个表单,其中包含许多名为pb_a1、pb_a2、pb_a3的图片框。。。等等 我有一个包含图片框名称的字符串数组。我需要做的是访问其中的每一个并为其指定一个图像。 我不想硬编码,而是想知道是否有任何方法可以编写一个循环,它可以给我以下命令 >Form1.pb_a1.Image=; > >表格1.pb_a2.Image=; > >表格1.pb_a3.Image=; > >表格1.pb_a4.Image=; 如果您只有图片控件的名称,而没有对它们的引用(我认为您可以在表单中早些时候创建

我有一个表单,其中包含许多名为pb_a1、pb_a2、pb_a3的图片框。。。等等

我有一个包含图片框名称的字符串数组。我需要做的是访问其中的每一个并为其指定一个图像。 我不想硬编码,而是想知道是否有任何方法可以编写一个循环,它可以给我以下命令

>Form1.pb_a1.Image=;
> 
>表格1.pb_a2.Image=;
> 
>表格1.pb_a3.Image=;
> 
>表格1.pb_a4.Image=;

如果您只有图片控件的名称,而没有对它们的引用(我认为您可以在表单中早些时候创建这些控件时,将其与名称和引用一起保存在字典中…),我认为您唯一的方法是在表单中搜索。控件集合,直到找到具有您要查找的名称且属于图片框类型的控件。

您可以使用表单
控件
属性上的方法吗?

您最好将图片框存储在图片框数组中,而不是字符串数组

PictureBox[] myPictures = {pictureBox1, pictureBox2, pictureBox3, pictureBox4};

foreach (PictureBox picture in myPictures)
{
    picture.Image = <some Image>;
}
PictureBox[]myPictures={pictureBox1,pictureBox2,pictureBox3,pictureBox4};
foreach(myPictures中的PictureBox图片)
{
picture.Image=;
}
如果必须将其作为字符串,下面的代码可能会对您有所帮助。请注意,我没有包含任何错误检查,以防元素不存在。您可能只会在数组的该部分获得一个空元素。您可能还需要将其封装在try/catch中

string[] myPicturesString = {"pictureBox1", "pictureBox2", "pictureBox3", "pictureBox4"};
            PictureBox[] myPictures = new PictureBox[myPicturesString.Length];

            for (int i = 0; i < myPictures.Length; i++)
            {
                foreach (Control c in this.Controls)
                {
                    if (c.Name == myPicturesString[i])
                    {
                        myPictures[i] = (PictureBox) c;
                    }
                }
            }

            MessageBox.Show(myPictures[1].Name);
string[]myPictureString={“pictureBox1”、“pictureBox2”、“pictureBox3”、“pictureBox4”};
PictureBox[]myPictures=新PictureBox[myPicturesString.Length];
对于(int i=0;i
假设这些picturebox是表单的字段,您可以在表单类上反射(System.Reflection),检索对picturebox字段的引用,并将它们存储到字典中。在表单创建期间(初始化组件之后)执行此操作

下次必须按图片框的名称访问图片框时,只需使用:

myDictionary["pictureboxname"].Image = blabla;

我想,如果您现在停下来阅读一些初学者编码指南和教程,将来会对自己有很大帮助。例如,pb_a1等不是一个特别被接受的命名约定。@MrEdmundo:我认为这是一个逻辑问题,而不是一个编码风格的问题。有许多编码约定,它们在某些上下文中都是有效的。@Nick我同意这是一个逻辑问题,这就是为什么我没有把我的评论作为答案。但我的观点仍然是。@Edmundo先生:pb_a1等只是例子。。。我不是一个很好的程序员,但我遵循一些准则…:)你有trid图像列表吗?对于您的场景,您必须循环表单。控件和比较名称…是否不可能创建类似宏的内容来创建所需的语句??由于搜索控件集合会耗费时间,这正是我现在正在做的,但不幸的是,表单中有太多控件,对每个控件进行随机搜索会将时间复杂性增加到不可接受的程度。但是Find()不是这样吗方法也允许您搜索子控件?代码处于这样的级别,现在我无法将图片框更改为数组。我已经在使用第二种解决方案了。还有别的办法吗??
myDictionary["pictureboxname"].Image = blabla;