vb.net如何在最小化后在图片框上绘制而不丢失内容?

vb.net如何在最小化后在图片框上绘制而不丢失内容?,vb.net,drawing,Vb.net,Drawing,当我最小化表单时,我会丢失画在图片框上的所有内容。我想把它保留在图片盒上。请在这方面帮助我。 代码如下所示 Private Sub ButtonDraw_Click(sender As Object, e As EventArgs) Handles ButtonDraw.Click Dim g As Graphics = PictureBox1.CreateGraphics Dim MyPen As New Pen(Color.Red) MyPen.Width = 2

当我最小化表单时,我会丢失画在图片框上的所有内容。我想把它保留在图片盒上。请在这方面帮助我。 代码如下所示

Private Sub ButtonDraw_Click(sender As Object, e As EventArgs) Handles ButtonDraw.Click
    Dim g As Graphics = PictureBox1.CreateGraphics
    Dim MyPen As New Pen(Color.Red)
    MyPen.Width = 2

    MyPen.DashStyle = DashStyle.Solid

    g.TranslateTransform(PictureBox1.Width / 2, PictureBox1.Height / 2)
    g.DrawEllipse(MyPen, New Rectangle(-150, -150, 300, 300))
End Sub

示例代码,使用Jimi建议的
Paint()
事件中的
e.Graphics

Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint
    Dim g As Graphics = e.Graphics
    Using MyPen As New Pen(Color.Red)
        MyPen.Width = 2
        MyPen.DashStyle = DashStyle.Solid

        g.TranslateTransform(PictureBox1.Width / 2, PictureBox1.Height / 2)
        g.DrawEllipse(MyPen, New Rectangle(-150, -150, 300, 300))
    End Using
End Sub

删除此选项:
Dim g As Graphics=PictureBox1.CreateGraphics()
,使用
PictureBox1
的绘制事件在其表面上绘制。将所有Graphics方法移到事件处理程序中(或者,更好的方法是从事件处理程序调用一个方法:将
e.Graphics
对象传递到此方法)这支笔是一次性物品,可以处置()它,也可以使用
语句声明它。你能为此编写一个代码吗@吉米:也许吧。你能描述一下这段代码应该实现什么吗?为什么要
TranslateTransform
将控件大小减半,然后添加一个具有固定尺寸的矩形?你是否打算在图片框中间画一个椭圆(一个圆圈)?如何调用这个函数,例如,如果我需要在不同的实例调用它,那么它是怎么做的……如果你想强制重画,调用<代码>图片Box1。如果您讨论的是多个矩形,那么您需要将每个矩形的信息存储在
列表(矩形的)
中,然后在
Paint()
事件中迭代该信息。通过这种方式,你可以在列表中添加一些内容,然后使新内容无效。这是可行的,但我不认为这是唯一的解决方案,因为当你必须反复绘制时,很难使用它。这取决于你的最终目标,更重要的是,你是否需要删除内容(或“打开”它们)和“关”)。如果你只添加了一些东西,那么你可以创建一个位图并永久地绘制它,然后将它分配给PictureBox的
.Image
属性。不过,这是绘制动态东西的标准方法。对于复杂的输出,或者如果有大量内容,则可能需要启用双缓冲,并查看优化动态绘制的内容与位图上“永久”的内容。您可以将这两种方法结合起来,将位图中的某些内容指定给
.Image
,而在
Paint()
事件中将其他内容绘制在位图的“顶部”。