【发布时间】:2010-12-05 09:51:28
【问题描述】:
我在我评论的那一行中发现了这个错误,有什么问题?
private void pictureBox34_Click(object sender, EventArgs e)
{
if (pictureBox34.Image == chess9.Properties.Resources.siyahsah2)
{
f();
}
}
public void picarray()
{
pic[0, 0] = pictureBox54;
pic[0, 1] = pictureBox64;
pic[0, 2] = pictureBox48;
pic[0, 3] = pictureBox42;
pic[0, 4] = pictureBox34;
pic[0, 5] = pictureBox26;
pic[0, 6] = pictureBox18;
pic[0, 7] = pictureBox8;
pic[1, 0] = pictureBox1;
pic[1, 1] = pictureBox2;
pic[1, 2] = pictureBox3;
pic[1, 3] = pictureBox4;
...
}
public void f()
{
// int i = 0, j = 0;
int x = 3;
int y = 3;
for (int i = 1; i < x; i++)
{
for (int j = 1; j < y; j++)
{
pic[i, j] = new PictureBox();
// pic[i, j] = pic[i + 1, j + 1];
pic[i, j].Image = chess9.Properties.Resources.siyahsah2;
}
}
}
【问题讨论】:
-
查看图片的路径...
-
你的代码太疯狂了。你为什么要为同一个数组条目分配 3 次。前两个任务是无操作的。而你的
picarray功能很可悲。为什么要使用 64 个预先创建的图片框,而不是在运行时循环创建它们? -
您的路径是相对于工作目录的,而不是相对于应用程序目录的。每当您的程序使用与应用程序目录不同的工作目录启动时,这将导致意外错误。
-
@CodeInChaos:同意,但要注意一点:Winforms 不会自动
DisposePictureBoxes 内的图像。因此,每个图像只有一个预先创建的实例比在需要时创建它们更有优势,因为您不会很快用完窗口/GDI 句柄(因为您最终会创建不那么新鲜的PictureBox实例)。但这当然不能解决真正的问题,(当然是要正确处理图像)。 -
我会在启动时创建 64 个图片框到一个数组中。每件一个图像到另一个数组中。然后我只需将图像数组中的图像分配给所需的图片框。 (或者只是使用单个图片框编写渲染代码,但这超出了 OP 的范围)。
标签: c# winforms exception-handling