Я создал простое решение с 2 проектами. Первый проект (библиотека классов) содержит пользовательский элемент управления «Контейнер», который рисует сам с закругленными углами. 2-й проект (формы Windows) - это тестовое приложение.
Если я добавлю экземпляр контейнера в основную форму во втором проекте, он будет красиво отображать закругленные углы. Также, когда я запускаю второй проект, я вижу Контейнер.
Однако, когда я начинаю перемещать форму (щелкаю и удерживаю строку заголовка), особенно когда я перемещаю ее очень быстро, весь рисунок запутывается, рисуется снова и снова, но сначала не очищается его поверхность ...
Я могу вызвать Container1.Refresh () в событии Form1.Move, но я не хочу устанавливать это каждый раз, потому что это также означает, что мне нужно вызывать Container1.Refresh () в событии Form1.Resize
и кто знает, какое еще событие ...
Есть ли событие в самом классе Container (control), где я должен вызвать Me.Refresh () или Me.Update () или Me.Invalidate ()?
Для справки (Form1.vb)
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub Form1_Move(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Move
Me.Container1.Refresh()
End Sub
End Class
для справки (Container.vb):
Imports System.Windows.Forms
Imports System.Drawing
Imports System.Drawing.Drawing2D
Public Class Container : Inherits Control
Private _Gp As GraphicsPath
Private Sub Container_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
Dim r As Rectangle = e.ClipRectangle
Dim gp As New GraphicsPath
Dim cs As Integer = 25 'CornerSize'
r.Inflate(-5, -5)
gp.AddArc(r.X, r.Y, cs, cs, 180, 90)
gp.AddArc(r.X + r.Width - cs, r.Y, cs, cs, 270, 90)
gp.AddArc(r.X + r.Width - cs, r.Y + r.Height - cs, cs, cs, 0, 90)
gp.AddArc(r.X, r.Y + r.Height - cs, cs, cs, 90, 90)
Dim t As Single = cs / 2 + r.Y
gp.AddLine(r.X, r.Y + r.Height - cs, r.X, t)
e.Graphics.SmoothingMode = Drawing.Drawing2D.SmoothingMode.AntiAlias
e.Graphics.DrawPath(Pens.Black, gp)
End Sub
End Class