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();
并且它有效。这就是我所知道的)
答案 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做这个。