Пояснить код оптимизации прорисовки пользовательского контрола - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Всем здравствуйте. Объясните пожалуйста следующий код (на контроле рисуется прямоугольник). Мерцание здесь отсутствует даже несмотря на отсутствие DoubleBuffered. Но почему всё так сложно и наворочено? В чём смысл? Ведь достаточно в конструктор вставить Me.DoubleBuffered = True и в обработчик Paint функцию DrawRectange... (Приведенный упрощённый код извлечён из C# контрола Analog Gauge).
Листинг программы
  1. Partial Public Class UserControl1
  2. Inherits UserControl
  3. Protected defaultRenderer As Renderer 'Внутренние переменные класса
  4. Private m_renderer As Renderer 'Переменные свойств
  5. 'Конструктор класса
  6. Public Sub New()
  7. 'Инициализация
  8. InitializeComponent()
  9. 'Создание рендерера по умолчанию
  10. Me.defaultRenderer = New DefaultRenderer()
  11. Me.defaultRenderer.uctrl = Me
  12. End Sub
  13. 'Делегат события "Перерисовка элемента управления"
  14. Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
  15. Dim _rc As New Rectangle(30, 30, 300, 150)
  16. Me.defaultRenderer.DrawRectangle(e.Graphics, _rc) 'рисуем прямоугольник
  17. End Sub
  18. End Class
  19. Public Class Renderer 'класс рендеринга элемента управления
  20. Private m_uctrl As UserControl1 = Nothing 'Внутренняя переменная свойства Управление прорисовкой
  21. Public Property uctrl() As UserControl1 'Свойство для управления прорисовкой
  22. Get
  23. Return Me.m_uctrl
  24. End Get
  25. Set(ByVal value As UserControl1)
  26. Me.m_uctrl = value
  27. End Set
  28. End Property
  29. 'виртуальный метод
  30. Public Overridable Function DrawRectangle(ByVal gr As Graphics, ByVal rc As Rectangle) As Boolean
  31. Return False
  32. End Function
  33. End Class
  34. 'Класс рендеринга элемента управления по-умолчанию
  35. Public Class DefaultRenderer
  36. Inherits Renderer
  37. 'рисуем прямоугольник
  38. Public Overrides Function DrawRectangle(ByVal gr As Graphics, ByVal rc As Rectangle) As Boolean
  39. gr.DrawRectangle(Pens.Red, rc)
  40. Return True
  41. End Function
  42. End Class

Решение задачи: «Пояснить код оптимизации прорисовки пользовательского контрола»

textual
Листинг программы
  1.     'виртуальный метод
  2.     Public Overridable Function DrawRectangle(ByVal gr As Graphics, ByVal rc As Rectangle) As Boolean
  3.         Return False
  4.     End Function

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.545 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы