继续得到"对象引用未设置为对象的实例。"用于picturebox数组

时间:2015-04-12 23:01:28

标签: c#

private void radar_Tick(object sender, EventArgs e)
{
    for (int i = 0; i < 20; i++)
    {
        x[i] = Readi(0x5C850C + (0x5A4 * i));
        y[i] = Readi(0x5C8510 + (0x5A4 * i));
        players[i].Location = new Point(x[i], y[i]);
    }
}

是的,在那之前:

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

我一直得到的是“对象引用未设置为对象的实例”。我不想在每个计时器刻度上创建新对象,我只想更改第i个图片框的位置。有任何想法吗? 空值不是x和y,null是pictebox数组。(我尝试添加players[i]=new PictureBox();并且它有效。这就是我所知道的)

1 个答案:

答案 0 :(得分:2)

如果您已有32个PictureBox个对象,并且想要更改其位置,则需要让每个players数组成员引用PictureBox

int i = 0;
foreach (var ctrl in this.Controls)
{
    if (ctrl is PictureBox)
    {
        var myPicturebBox = (PictureBox)ctrl;
        players[i] = myPictureBox;
        i++;
    }
}

现在,您的数组成员会引用PictureBox中的所有Form个对象。

修改

由于您的PictureBox对象都是以编程方式创建的,因此可以在使用它们之前对它们进行实例化,如下所示:

PictureBox myPictureBox = new PictureBox();

现在您需要将PictureBox添加到Controls的{​​{1}}集合中:

Form

然后你可以使用前面的代码,使用循环为所有PictureBox做这个。