'BY AI: VB.NET 让窗体绘图持久化
'在VB.NET中, 要让窗体绘图持久化, 可以在窗体的Paint事件处理程序中将绘制的内容保存到一个位图(Bitmap)中, 然后在Load事件或者每次需要重绘时, 从位图中绘制。
'以下是一个简单的示例:
'在这个例子中, Form1_Load 事件中创建了一个新的位图, 并且用 DrawOnBitmap 方法在位图上进行了绘制。Form1_Paint 事件中则将这个位图绘制到窗体上。这样, 每次窗体需要重绘时, 它会从位图中读取先前保存的绘图状态。'如果你需要在窗体大小改变时持久化绘图, 可以在 Resize 事件中调整位图大小并重新绘制, 这样, 每当用户调整窗体大小时, 绘图状态都会被更新, 并且保持不变。
Public Class Form1
Private Shared bmp As Bitmap
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' 创建一个与窗体大小相同的位图
bmp = New Bitmap(Me.ClientSize.Width, Me.ClientSize.Height)
' 使用指定的Graphics对象绘制位图
DrawOnBitmap(bmp)
' 立即重绘窗体
Me.Invalidate()
Me.Text = "VB.NET 让窗体绘图持久化"
End Sub
Private Sub DrawOnBitmap(bmp As Bitmap)
' 使用GDI+绘制位图
Using g As Graphics = Graphics.FromImage(bmp)
g.Clear(Color.White) ' 清除位图背景,使用窗体的背景颜色
' 绘制内容,例如一条蓝色线
g.DrawLine(Pens.Blue, 0, 0, bmp.Width, bmp.Height)
End Using
End Sub
Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint
' 从位图中绘制
Debug.Print("drawimg--Form2_Paint")
e.Graphics.DrawImage(bmp, 0, 0)
End Sub
Private Sub Form1_Resize(sender As Object, e As EventArgs) Handles Me.Resize
If Not bmp Is Nothing Then
Debug.Print("drawimg--Form2_Resize")
'Me.CreateGraphics.DrawImage(bmp, 0, 0)
bmp = New Bitmap(Me.ClientSize.Width, Me.ClientSize.Height)
DrawOnBitmap(bmp)
' 立即重绘窗体
Me.Invalidate()
End If
End Sub
End Class