Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#创建PictureBox数组的更简单方法(48个盒子)_C#_Arrays_String_Picturebox - Fatal编程技术网

C#创建PictureBox数组的更简单方法(48个盒子)

C#创建PictureBox数组的更简单方法(48个盒子),c#,arrays,string,picturebox,C#,Arrays,String,Picturebox,项目环境:Visual Studio 2013,使用Windows窗体模板 这就是我目前拥有的,我假设有一种更简单的方法来创建这样的数组。我试过很多方法,但我对C#还不够了解 PictureBox[] boxes = { runeBox1, runeBox2, runeBox3, runeBox4, runeBox5, runeBox6, runeBox7, runeBox8, runeBox9, runeBox10,

项目环境:Visual Studio 2013,使用Windows窗体模板

这就是我目前拥有的,我假设有一种更简单的方法来创建这样的数组。我试过很多方法,但我对C#还不够了解

   PictureBox[] boxes = {
                 runeBox1, runeBox2, runeBox3, runeBox4, runeBox5, runeBox6, runeBox7, runeBox8, 
                 runeBox9, runeBox10, runeBox11, runeBox12, runeBox13, runeBox14, runeBox15, runeBox16, 
                 runeBox17, runeBox18, runeBox19, runeBox20, runeBox21, runeBox22, runeBox23, runeBox24, 
                 runeBox25, runeBox26, runeBox27, runeBox28, runeBox29, runeBox30, runeBox31, runeBox32, 
                 runeBox33, runeBox34, runeBox35, runeBox36, runeBox37, runeBox38, runeBox39, runeBox40, 
                 runeBox41, runeBox42, runeBox43, runeBox44, runeBox45, runeBox46, runeBox47, runeBox48};
到目前为止,我尝试的是:

string[] strArr = new string[48];
        for (int i = 1; i != 48; i++)
            {
            strArr[i] = "runebox" + i.ToString();
            }
        int count = 0;
        foreach (object p in this.Controls)
            {
            if (p.GetType() == typeof(PictureBox))
                {
                if (((PictureBox)p).Name == strArr[count])
                    {
                    boxes[count] = ((PictureBox)p);
                    count++;
                    }
                }
            }
这可以编译,但在数组框中会出现null指针异常

我还尝试了一个类型转换器,但也没有得到任何结果


希望你们中的一些聪明人能告诉我去罗马的路。

一句话就可以找到所有形式的图片框

private PictureBox[] boxes;
.ctor
{
    InitializeComponent();
    boxes = this.Controls.OfType<PictureBox>()
            .Where(pb => pb.Name.StartsWith("runeBox"))
            .OrderBy(pb => int.Parse(pb.Name.Replace("runeBox","")))
            .ToArray();
}
private PictureBox[]框;
博士
{
初始化组件();
box=this.Controls.OfType()
.Where(pb=>pb.Name.StartsWith(“runeBox”))
.OrderBy(pb=>int.Parse(pb.Name.Replace(“runeBox”),“”)
.ToArray();
}

如果您只想创建它,然后手动将它们添加到表单中,您可以使用LINQ和可枚举项

您可以这样创建它们:

var pictureboxes = Enumerable.Range(1,48).ToList().Select(i=> new PictureBox(){Name = "runebox" + i.ToString()}).ToList();
然后,要添加到表单中,您只需执行以下操作:

pictureboxes.ForEach(pic=> this.Controls.Add(pic));

48个图片盒?我肯定你做错了。在修复
NullReferenceException
之前,您需要处理~48个图片框。您可以从索引1开始填充strArr,但当您访问表单的控件时,从count=0开始。。。我建议您将for循环更改为(inti=0;I<48;I++)。这将有助于了解您首先为什么要这样做。窗体上似乎已经存在PictureBox控件数组时?那么,为什么不直接访问它们呢?为什么是阵列呢?我已经放置了48个盒子,我用图像填充它们。我需要阵列,以便轻松清除图像,这样程序就可以在不显示旧图像的情况下再次放置新图像。这正是我要寻找的。非常感谢。现在我只需要学会如何自己想出这些东西。耶,学习!