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