基本上我需要刷新表单的一部分而不是整个表单的代码。
我使用visual basic,我经常制作非常简单的游戏。我经常有一个播放器或不同的对象四处移动,因为我没有发布我的代码,所以我不添加纹理。相反,我设置了一堆变量来保存播放器的location
和width
,然后使用e.graphics.FillRectangle
...等,这很好,并且当我按下一个键但没有任何反应时我说它移动它,所以我必须写Refresh()
,它有效,它会移动!
唯一的问题是当有很多对象(如50+)时,每次程序运行Refresh()
代码行时,整个form
变为白色一毫秒而且通常我一直都很新鲜,因为事情一直在变化,形式只会变成癫痫的噩梦。
我知道我需要做什么,我只需要refresh
整个表格的一小部分,我只是不知道如何。
答案 0 :(得分:0)
您可以使用Invalidate
方法来实现您的目标。
为了更好地理解以下代码,您只需要了解Invalidate
的作用。简单地说,使您选择的整个control
无效,并强制它重绘本身。
选项1
最简单的方法是:
Me.Invalidate(New Region(New Rectangle(10, 10, 100, 100)))
通过执行此操作,您在表单的invalidate
位置100 width
和100 height
处执行(10,10)
(导致重新绘制)。
选项2
如果选项1没有达到您想要的效果,我建议您使用rectangles
命名Increment
,以便MyRectange1.Invalidate()
,MyRectangle2.Invalidate()
和rectangle
等名称访问它们。等等(最有可能是循环)。
选项3
如果您不清楚具体知道哪些region
要刷新并且不想指定panelBottomLeft.Invalidate()
,则可以将屏幕分开,例如4个部分(这将是容器,如面板)。然后你可以这样做: For Each ControlToRefresh In panelBottomLeft.Controls
ControlToRefresh.Invalidate()
Next
。
或者像这样:
{{1}}