Я искал способ уменьшить раздражающее мерцание на моих элементах управления при открытии формы на некоторое время, и единственное найденное мной решение, которое работает, это использование этого расширенного стиля окна WS_EX_COMPSITED
из приведенной ниже документации: https://docs.microsoft.com/en-us/windows/win32/winmsg/extended-window-styles
Protected Overrides ReadOnly Property CreateParams() As CreateParams
Get
Dim cp As CreateParams = MyBase.CreateParams
cp.ExStyle = cp.ExStyle Or &H2000000
Return cp
End Get
End Property
Добавление этого в класс останавливает мерцание элементов управления (хотя и с небольшим снижением производительности, но в моем случае это незначительно) - скорее всего, из-за двойного Буферизованная форма.
Моя проблема в том, что когда это свойство применяется к классу, Graphics
и Drawing
, похоже, перестают работать в любом качестве в классе. Я пробовал приведенный ниже код с добавленным и удаленным свойством, и он работает только при удалении:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim myPen As Pen
Dim myBrush As Brush
myPen = New Pen(Drawing.Color.FromArgb(53, 64, 82), 1)
myBrush = New SolidBrush(Color.FromArgb(180, 204, 112))
Dim myGraphics As Graphics = Me.Panel1.CreateGraphics
myGraphics.DrawEllipse(myPen, 28, 28, 12, 12)
myGraphics.FillEllipse(myBrush, 28, 28, 12, 12)
End Sub
Я предполагаю, что это как-то связано с тем, как стиль WS_EX_COMPOSITED
работает с точки зрения не обновляется / перерисовывается правильно и т. д. c, но Me.Refresh()
или Me.Panel1.Refresh()
, похоже, не перерисовывают его в любом случае.
Есть ли обходной путь для этого, который я могу использовать? Это ошибка или ограничение данного конкретного стиля расширенного окна?