VB.NET如何清除表单的背景
问题描述:
我想在VB网络中创建一个简单的弹性球应用程序; 我正在使用计时器和FillEllipse()方法来尝试广告在计时器的每个滴答时间创建一个新的圈子。 代码:VB.NET如何清除表单的背景
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim Gr As Graphics = Me.CreateGraphics
Gr.FillEllipse(Brushes.Teal, X, Y, W, H)
CollisionDetect()
X = X + X_Dir
Y = Y + Y_Dir
Gr.Dispose()
End Sub
结果呢?表格连续绘制自己,而不清除最后一个圆圈。这意味着你最终会在一起形成一个“线条”。
澄清: X为良好,在X COORDS Y是Y- Y型COORDS
X_Dir是整数,它被添加到循环的每次迭代,以便下一次循环迭代,它将在不同的位置; Y_Dir与Y Coords相同;
CollisionDetect()为空。它还有待填补,它将处理与表格两侧的碰撞。 W,H分别是宽度和高度。
想法?
答
通常绘画是在Paint事件触发时完成的。将具有所需背景色的Panel
控件添加到您的表单中。处理Paint
事件的面板
Private Sub Panel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint
e.Graphics.FillEllipse(Brushes.Teal, X, Y, W, H)
End Sub
专家组将始终在绘制之前自动清零。
更改计时器滴答事件处理程序
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Panel1.Invalidate() ' This triggers the Paint event
CollisionDetect()
X = X + X_Dir
Y = Y + Y_Dir
End Sub
注意,Paint事件被自动解雇,如果面板是由另一种形式隐蔽,例如,具有重绘。如果电脑繁忙并且无法绘画,则可能会跳过一些绘画事件。因此请保持您的游戏逻辑(计算)在Timer1_Tick
。
如果你更喜欢直接在窗体上画,你可以通过使用窗体的Paint事件,而不是在面板的油漆事件,并通过调用Me.Invalidate()
而不是Panel1.Invalidate()
。
当移植到.Net时,CLS方法被拒绝,否则我会建议。 – N0Alias 2012-02-23 22:38:35