Пояснить код оптимизации прорисовки пользовательского контрола - Visual Basic .NET
Формулировка задачи:
Всем здравствуйте.
Объясните пожалуйста следующий код (на контроле рисуется прямоугольник). Мерцание здесь отсутствует даже несмотря на отсутствие DoubleBuffered. Но почему всё так сложно и наворочено? В чём смысл? Ведь достаточно в конструктор вставить Me.DoubleBuffered = True и в обработчик Paint функцию DrawRectange... (Приведенный упрощённый код извлечён из C# контрола Analog Gauge).
Листинг программы
- Partial Public Class UserControl1
- Inherits UserControl
- Protected defaultRenderer As Renderer 'Внутренние переменные класса
- Private m_renderer As Renderer 'Переменные свойств
- 'Конструктор класса
- Public Sub New()
- 'Инициализация
- InitializeComponent()
- 'Создание рендерера по умолчанию
- Me.defaultRenderer = New DefaultRenderer()
- Me.defaultRenderer.uctrl = Me
- End Sub
- 'Делегат события "Перерисовка элемента управления"
- Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
- Dim _rc As New Rectangle(30, 30, 300, 150)
- Me.defaultRenderer.DrawRectangle(e.Graphics, _rc) 'рисуем прямоугольник
- End Sub
- End Class
- Public Class Renderer 'класс рендеринга элемента управления
- Private m_uctrl As UserControl1 = Nothing 'Внутренняя переменная свойства Управление прорисовкой
- Public Property uctrl() As UserControl1 'Свойство для управления прорисовкой
- Get
- Return Me.m_uctrl
- End Get
- Set(ByVal value As UserControl1)
- Me.m_uctrl = value
- End Set
- End Property
- 'виртуальный метод
- Public Overridable Function DrawRectangle(ByVal gr As Graphics, ByVal rc As Rectangle) As Boolean
- Return False
- End Function
- End Class
- 'Класс рендеринга элемента управления по-умолчанию
- Public Class DefaultRenderer
- Inherits Renderer
- 'рисуем прямоугольник
- Public Overrides Function DrawRectangle(ByVal gr As Graphics, ByVal rc As Rectangle) As Boolean
- gr.DrawRectangle(Pens.Red, rc)
- Return True
- End Function
- End Class
Решение задачи: «Пояснить код оптимизации прорисовки пользовательского контрола»
textual
Листинг программы
- 'виртуальный метод
- Public Overridable Function DrawRectangle(ByVal gr As Graphics, ByVal rc As Rectangle) As Boolean
- Return False
- End Function
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д