Vb.net 刷新表单的一部分而不是整个表单
基本上,我需要刷新表单一部分的代码,而不是整个表单 我使用VisualBasic,我经常制作非常简单的游戏。我经常有一个播放器或不同的对象四处移动,因为我没有发布我的代码,所以我不添加纹理。相反,我设置了一组变量来保存播放器的Vb.net 刷新表单的一部分而不是整个表单,vb.net,refresh,Vb.net,Refresh,基本上,我需要刷新表单一部分的代码,而不是整个表单 我使用VisualBasic,我经常制作非常简单的游戏。我经常有一个播放器或不同的对象四处移动,因为我没有发布我的代码,所以我不添加纹理。相反,我设置了一组变量来保存播放器的位置和宽度,然后使用e.graphics.FillRectangle。。。等等,这很好,比如说我按下一个键时移动了它,但什么也没发生,所以我必须写Refresh(),它会移动 唯一的问题是,当有很多对象时,比如50+,每次程序运行Refresh()代码行时,整个表单在一毫秒
位置
和宽度
,然后使用e.graphics.FillRectangle
。。。等等,这很好,比如说我按下一个键时移动了它,但什么也没发生,所以我必须写Refresh()
,它会移动
唯一的问题是,当有很多对象时,比如50+,每次程序运行Refresh()
代码行时,整个表单在一毫秒内变为白色,通常我一直在刷新,因为东西一直在移动,表单只是变成了一场噩梦
我知道我需要做什么,我只需要刷新整个表单的一小部分,我只是不知道怎么做。怎么做
您可以使用Invalidate
方法来实现所需的功能
什么是无效
为了更好地理解以下代码,您只需知道Invalidate
的作用。简单地说,它将使您选择的整个控件无效,并强制它重新绘制自身
知道什么是无效的
选项1
最简单的方法如下:
Me.Invalidate(New Region(New Rectangle(10, 10, 100, 100)))
这样做就是在表单的(10,10)
位置处的100宽度和100高度上执行无效化
(导致重新绘制)
选项2
如果选项1不能满足您的要求,我建议您使用增量来命名矩形
,这样就可以通过名称访问它们,例如MyRectange1.Invalidate()
,MyRectangle2.Invalidate()
等等(最有可能在循环中)
选项3
如果您不知道要刷新哪个矩形
,也不想指定一个区域
,您可以将屏幕分成4个部分(例如面板等容器)。然后可以执行以下操作:panelBottomLeft.Invalidate()
或者像这样:
For Each ControlToRefresh In panelBottomLeft.Controls
ControlToRefresh.Invalidate()
Next
如果矩形未按预期移动,则可能是绘制错误,或者这是XY问题。没有代码很难说。请参阅:该方法具有参数选项。如果您移动某个对象并仅在其所在位置绘制,将在其所在位置留下一个空白/未绘制的区域。这非常有用,工作非常完美,谢谢micbobo。没问题,很高兴我能帮上忙