Пользовательский контроль рисует нормально на одном компьютере, но не на другом.Рисование за графикой? - PullRequest
0 голосов
/ 06 августа 2011

У меня есть пользовательский класс управления, который я только что сделал.На моей машине dev на работе (гостевой виртуалбокс 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 Ответ

1 голос
/ 06 августа 2011

UserControl - это контейнерный элемент управления, такой как Panel. Обычно они не имеют своего собственного контента, а просто действуют как контейнеры для других элементов управления. Их поведение было оптимизировано для этого, избегая чрезмерного рисования, поскольку это может вызвать много мерцания во время операций изменения размера. Но в этом случае вы действительно заботитесь о живописи. Что хорошо, вам просто нужно отменить оптимизацию. Сделайте так, чтобы ваш конструктор выглядел так:

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

Я оставил вызов InitializeComponent (), так как он обычно там. Важным является вызов SetStyle ().

...