C# 不断获得;对象引用未设置为对象的实例。”;用于picturebox阵列

C# 不断获得;对象引用未设置为对象的实例。”;用于picturebox阵列,c#,C#,我一直得到的是“对象引用未设置为对象的实例”。我不想在每个计时器上都创建新对象,我只想更改I-th picturebox的位置。有什么想法吗? 空值不是x和y,空值是PictureBox数组。(我尝试添加了Player[I]=new PictureBox();,它成功了。我就是这样知道的)如果你已经有32个PictureBox对象,并且你想更改它们的位置,你需要让每个播放器数组成员引用一个PictureBox public partial class Form1 : Form { pub

我一直得到的是“对象引用未设置为对象的实例”。我不想在每个计时器上都创建新对象,我只想更改I-th picturebox的位置。有什么想法吗?
空值不是x和y,空值是PictureBox数组。(我尝试添加了
Player[I]=new PictureBox();
,它成功了。我就是这样知道的)

如果你已经有32个
PictureBox
对象,并且你想更改它们的位置,你需要让每个
播放器
数组成员引用一个
PictureBox

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    int []x=new int[32];int []y=new int[32];
    PictureBox[] players=new PictureBox[32];    
    ...  
}
private void Form1_Load(object sender, EventArgs e)
    {
        int i = 0;
        foreach (var ctrl in this.Controls)
        {
            if (ctrl is PictureBox)
            {
                var myPicturebBox = (PictureBox)ctrl;
                players[i] = myPicturebBox;
                this.Controls.Add(players[i]);
                i++;

            }
        }
        radar.Interval = 100;
        radar.Start();
    }
现在,数组成员引用了
表单中的所有
PictureBox
对象

编辑

由于PictureBox对象都是以编程方式创建的,因此在使用它们之前,您必须先对它们进行设置,如下所示:

int i = 0;
foreach (var ctrl in this.Controls)
{
    if (ctrl is PictureBox)
    {
        var myPicturebBox = (PictureBox)ctrl;
        players[i] = myPictureBox;
        i++;
    }
}
现在,您需要将PictureBox添加到
表单的
控件集合中:

PictureBox myPictureBox = new PictureBox();

然后您可以使用前面的代码,使用循环对所有图片框执行此操作。

玩家在雷达勾号中可能重复为null?这两个x[i]和y[i]是什么?您是否创建了两个数组x和y并初始化了它们?我想,我在雷达勾号中所做的一切都显示在代码中。如果为null,我该怎么办@首先,它是空的吗?或per@Lourayad,为
x
y
null。首先要做的是找出什么是空的。这个放进雷达?我试过了,但它总是会创建另一个picturebox,正如我提到的,我不想要新的picturebox,我只想改变它的位置。然后你需要用已经存在的
图片盒
对象填充你的
玩家
数组。这是否意味着我必须在我的表单上添加32个图片盒?没有更简单的方法吗?HuhNo,不在
radar_Tick
,把它放在
表单\u Load
或类似的地方。你从设计器中添加了图片框?或者它们是以编程方式创建的?
PictureBox myPictureBox = new PictureBox();
this.Controls.Add(myPictureBox)