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分别是宽度和高度。

想法?

+0

当移植到.Net时,CLS方法被拒绝,否则我会建议。 – N0Alias 2012-02-23 22:38:35

通常绘画是在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()

+0

画一个矩形?一个例子请 – Azerty560 2012-02-23 22:25:04

+0

你的意思是像在Timer1.tick的结尾处,我在它的最后画一个矩形? – Azerty560 2012-02-23 22:25:32

+0

谢谢,这非常有用! :D – Azerty560 2012-02-23 22:38:29