专注VB编程开发20年

专注VB编程开发20年

'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
10-20 19:28