我有一个我刚刚制作的自定义控件类。 在我的开发机器上工作(虚拟机客户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
答案 0 :(得分:1)
UserControl是一个容器控件,如Panel。它们通常没有自己的内容,只是充当其他控件的容器。他们的行为针对此进行了优化,避免了过度绘画,因为在调整大小操作期间会导致大量闪烁。但在这种情况下,你真的关心这幅画。哪个好,你只需要撤消优化。使你的构造函数看起来像这样:
Sub New()
Me.InitializeComponent()
Me.SetStyle(ControlStyles.ResizeRedraw, True)
End Sub
我离开了InitializeComponent()调用,因为它通常存在。 SetStyle()调用是重要的。