Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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#仅在告诉他们刷新时刷新图片盒/面板?_C#_Refresh_Panel_Picturebox_Paint - Fatal编程技术网

C#仅在告诉他们刷新时刷新图片盒/面板?

C#仅在告诉他们刷新时刷新图片盒/面板?,c#,refresh,panel,picturebox,paint,C#,Refresh,Panel,Picturebox,Paint,我正在用C#windows窗体应用程序制作一个bomberman游戏。它有300多个图片盒(墙)放在一个面板上。bomberman本人的图片盒也在该面板上 当bombermans picturebox的位置更改时,面板上的所有控件都会自动刷新。由于该面板上有太多控件,并且picturebox的位置每秒更改多次,因此当我尝试移动时,程序会变得滞后 我想控制面板的刷新事件(及其控件),因为我认为只有需要刷新的PictureBox以编程方式刷新时,问题才得以解决 我希望有人能帮我解决这个问题 Ruud

我正在用C#windows窗体应用程序制作一个bomberman游戏。它有300多个图片盒(墙)放在一个面板上。bomberman本人的图片盒也在该面板上

当bombermans picturebox的位置更改时,面板上的所有控件都会自动刷新。由于该面板上有太多控件,并且picturebox的位置每秒更改多次,因此当我尝试移动时,程序会变得滞后

我想控制面板的刷新事件(及其控件),因为我认为只有需要刷新的PictureBox以编程方式刷新时,问题才得以解决

我希望有人能帮我解决这个问题


Ruud.

如果移动子对象,则必须刷新父对象,因为它可能需要绘制子对象以前所在的区域。这也意味着(父项的)所有子项都将刷新


另外,使用这么多控件可能不是一个好主意。我建议您保留描述墙的数据结构,然后使用它在面板(或自定义控件)中绘制墙。通过在面板/父级捕获鼠标/键盘事件,您可以编写自己的命中测试逻辑(在墙边界内单击鼠标或键盘)。有了正确的组织数据结构,命中测试可以非常有效。

您正在尝试绘制整个表单,这肯定需要时间。如果只想更改表单的一部分(在本例中是将bomberman移动到新位置),请仅使要重新绘制的区域无效,然后将其传递给invalidate方法

做类似的事情

//Invalidate previous position of bomberman
Rectangle invalid = new Rectangle(picturebox1.Location.x,picturebox1.Location.y,picturebox1.Width,picturebox1.Height);
Invalidate(invalid);
//Add code to move your picture box and then call above two lines again
invalid = new Rectangle(picturebox1.Location.x,picturebox1.Location.y,picturebox1.Width,picturebox1.Height);
Invalidate(invalid);
请注意,当然,但有一点类似的抛光代码可以工作


下面是一个链接,指向一个示例以供参考

这已经自动发生了,根本不需要编写任何代码。@Hans Passant。我有一种感觉,当你为一个控件指定一个新的位置时,重新绘制是自动完成的,但不确定它是否正确…最后一段没有参数。不要使用图片框。重写窗体的OnPaint()方法,并使用e.Graphics.DrawImage()绘制墙。