> 'Выполнить рисование
> '-------------------
> 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)
> '------------------------------------------------------
> 'Выбрать цвет новой кисти, исходя из цвета старой кисти
> '------------------------------------------------------
> If (m_RectangleColor.Equals(System.Drawing.Color.Black)) Then
> m_RectangleColor = System.Drawing.Color.Blue
> '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
> 'Запустить событие!
> '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
> 'Возбудить событие без передачи аргумента
> RaiseEvent EventButtonTurningBlue(Me, Nothing)
> ElseIf (m_RectangleColor.Equals(System.Drawing.Color.Blue)) Then