Шрифт:
'--------------------------------------------------------------------------
Dim myGfx As System.Drawing.Graphics
myGfx = e.Graphics
'-------------------------------------------------------------------
'Поскольку эту операцию рисования необходимо выполнить быстро,
'кэшируем кисти, чтобы избавить себя от необходимости создавать их и
'уничтожать при каждом вызове
'-------------------------------------------------------------------
If (m_brushBlue Is Nothing) Then
m_brushBlue = New System.Drawing.SolidBrush( _
System.Drawing.Color.Blue)
End If
If (m_brushYellow Is Nothing) Then
m_brushYellow = New System.Drawing.SolidBrush( _
System.Drawing.Color.Yellow)
End If
'-------------------
'Выполнить рисование
'-------------------
myGfx.FillRectangle(m_brushBlue, 2, 2, 100, 100)
myGfx.DrawString("PaintCount: " + CStr(m_paintCount), _
Me.Font, m_brushYellow, 3, 3)
'Выход: Объекты, для которых мы должны были бы вызывать метод
'.Dispose, отсутствуют.
End Sub
Листинг 11.9. Простой пользовательский элемент управления, который изменяет цвета и запускает событие, определяемое пользователем
'Простейший пользовательский элемент управления
Public Class myButton
Inherits System.Windows.Forms.Control
'--------------------------------------
'Объекты, необходимые нам для рисования
'--------------------------------------
Private m_RectangleBrush As System.Drawing.Brush
Private m_TextBrush As System.Drawing.Brush
Private m_RectangleColor As System.Drawing.Color
'------------------------------------------------------------------------
'Событие, которое мы хотим предоставить на обработку. Это - общедоступный
'делегат.
'------------------------------------------------------------------------
Public Event EventButtonTurningBlue(ByVal sender As Object, _
ByVal e As System.EventArgs)
'Конструктор
Public Sub New
MyBase.New
'ПРИМЕЧАНИЕ: Мы должны написать функцию "Dispose" и
'деструктор, который освобождает память от этих объектов
'Создать необходимые кисти
m_RectangleColor = System.Drawing.Color.Black
m_RectangleBrush = New System.Drawing.SolidBrush( _
m_RectangleColor)
m_TextBrush = New System.Drawing.SolidBrush( _
System.Drawing.Color.White)
End Sub
'-----------------------------------------------
'Внутренним откликом на щелчок является
'повторение трех различных цветов кнопки в цикле
'-----------------------------------------------
Protected Overrides Sub OnClick(ByVal e As System.EventArgs)
'--------------------------------------------------------
'Важно: Вызвать базовую реализацию. Это
'обеспечит возможность вызова любого обработчика событий,
'подключенного к данному элементу управления
'--------------------------------------------------------
MyBase.OnClick (e)