哈里最近在使用vb.net中,遇到很多问题。其中有一个是.net窗体上的绘制问题。
在vb6中,可以很简单的在窗体上画画,通过设置窗体的autoredraw属性还可以保持绘制的图形不会因为窗体超出屏幕边界等情况消失。
那.net里面如何画画能让窗体不消失,并且能用timer时钟控件做出动画一般的效果呢?
例如下面这样:
我们新建一个项目,在窗体上新建一个picturebox控件,把名字改成pic,autosize属性选为true。
然后新建一个timer控件,enabled属性设置为true。
最后窗体代码如下:
Public Class Form1
Private x As Single = 100, y As Single = 50, x2 As Single = 300
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Pic.Image = New Bitmap(200, 200) '用空白图片填充pic控件的图片属性,这里是为了在下次timer内函数作画前,图像不会因为各种原因消失
Dim g As Graphics = Graphics.FromImage(Pic.Image) '将我们作画的画板选用为pic控件图片属性中的那张图片
g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias '图像抗锯齿
Dim p As New Pen(Brushes.Gold, 2) '定义p为宽度2的金色笔
g.DrawEllipse(p, x, y, 100, 100) '在画板上画一个长宽都是100的椭圆(其实就是直径100的圆),椭圆的左上角坐标是(x,y)
g.DrawEllipse(p, x2, y, 100, 100)
x -= 1 '每次迭代圆1的横坐标-1
x2 -= 1 '圆2横坐标-1
If x <= -200 Then '圆跑到左边看不到的地方了就重置到右边看不到的地方等待出现
x += 400
End If
If x2 <= -200 Then
x2 += 400
End If
'下面四条线画出一个正方形方框
g.DrawLine(Pens.Red, 0, 0, 199, 0) '用红色的笔在画板上画一条从坐标0,0到坐标199,0的直线
g.DrawLine(Pens.Red, 199, 0, 199, 199)
g.DrawLine(Pens.Red, 199, 199, 0, 199)
g.DrawLine(Pens.Red, 0, 199, 0, 0)
Me.Refresh() '刷新窗体使我们的画板内容绘制到显示器上
End Sub
End Class
以上。
欢迎补充及指正~