刷新表单的一部分而不是全部

Refresh part of a form not the whole thing

基本上我需要刷新部分表单的代码,而不是整个表单。

我使用 visual basic,我经常制作非常简单的游戏。我经常有一个 Player 或四处移动的不同对象,并且由于我不发布我的代码,所以我不添加纹理。相反,我设置了一堆变量来保存 Playerlocationwidth,然后使用 e.graphics.FillRectangle... 等等,然后工作正常,并说当我按下一个键时我移动它但没有任何反应,所以我必须写 Refresh(),这有效,它移动了!

唯一的问题是当有很多对象时,比如 50+,每次程序运行 Refresh() 行代码时整个 form 变为 白色一毫秒,通常我一直都在刷新,因为事情一直在变化,表格只是癫痫的噩梦。

我知道我需要做什么,我只需要 refresh 整个表格的一小部分,我只是不知道该怎么做。

怎么做

你可以使用Invalidate的方法来实现你想要的。

什么是无效

为了更好地理解以下代码,您只需要知道 Invalidate 的作用。简而言之,它 使 您选择的整个 control 无效,并强制它 重绘 本身。

知道要使什么无效

选项 1

执行此操作的最简单方法如下:

Me.Invalidate(New Region(New Rectangle(10, 10, 100, 100)))

通过这样做,您将在 100 width100 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