用户控制在一台机器上绘图,但不是另一台机器。在图形背后绘制?

时间:2011-08-06 04:01:49

标签: winforms drawing controls

我有一个我刚刚制作的自定义控件类。 在我的开发机器上工作(虚拟机客户Win7 x64运行VS2010),它完美地绘制。重新调整大小,以及一切。

在我的家用机器上,它第一次绘制,然后如果我调整大小,除了边缘之外我没有看到任何变化。密切关注这些文物似乎指向我控制下的画面而不是顶部。我不知道会有什么不同。

Imports System.Drawing

Public Class NetworkDiagram
    Inherits Windows.Forms.UserControl

    Sub New()
    End Sub

    Sub DrawNetwork(e As System.Windows.Forms.PaintEventArgs)

        Dim pen1 As New Pen(Color.Blue, 1.0F)

        ' Draw a basic smiley face
        e.Graphics.FillEllipse(Brushes.Yellow, 0, 0, Me.Width - 1, Me.Height - 1) ' Face
        e.Graphics.FillEllipse(Brushes.Black, Me.Width / 4.0F, Me.Height / 4.0F, Me.Width / 6.0F, Me.Height / 6.0F) ' Left Eye
        e.Graphics.FillEllipse(Brushes.Black, Me.Width - (Me.Width / 3.0F) - 10, (Me.Height / 4.0F), (Me.Width / 6.0F), (Me.Height / 6.0F)) ' Right Eye
        e.Graphics.DrawArc(Pens.Black, (Me.Width / 4.0F), (Me.Height / 2.0F), (Me.Width / 2.0F), (Me.Height / 4.0F), 0, 180) ' Mouth

        pen1.Dispose()
    End Sub

    Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
        DrawNetwork(e)
        MyBase.OnPaint(e)
    End Sub
End Class

1 个答案:

答案 0 :(得分:1)

UserControl是一个容器控件,如Panel。它们通常没有自己的内容,只是充当其他控件的容器。他们的行为针对此进行了优化,避免了过度绘画,因为在调整大小操作期间会导致大量闪烁。但在这种情况下,你真的关心这幅画。哪个好,你只需要撤消优化。使你的构造函数看起来像这样:

Sub New()
    Me.InitializeComponent()
    Me.SetStyle(ControlStyles.ResizeRedraw, True)
End Sub

我离开了InitializeComponent()调用,因为它通常存在。 SetStyle()调用是重要的。