Литмир - Электронная Библиотека
Содержание  
A
A

 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

  m_RectangleColor = System.Drawing.Color.Red

 Else

  m_RectangleColor = System.Drawing.Color.Black

 End If

 '-----------------------

 'Освободить старую кисть

 '-----------------------

 m_RectangleBrush.Dispose()

 '----------------------------------------------------------------

 'Создать новую кисть, которую мы собираемся использовать для фона

 '----------------------------------------------------------------

 m_RectangleBrush = _

  New System.Drawing.SolidBrush(m_RectangleColor)

 '------------------------------------------------------------

 'Сообщить операционной системе, что наш элемент управления

 'должен быть перерисован, как только представится возможность

 '------------------------------------------------------------

 Me.Invalidate()

End Sub

'----------------------------------------------------------------

'Ради интереса подсчитаем, сколько раз осуществлялась перерисовка

'----------------------------------------------------------------

Private m_paintCount As Integer

Protected Overrides Sub OnPaint( _

 ByVal e As System.Windows.Forms.PaintEventArgs)

 '--------------------------------------------

 'ВАЖНО: Вызвать базовый класс и позволить ему

 'выполнить работу по рисованию

 '--------------------------------------------

 MyBase.OnPaint(e)

 'Увеличить на единицу значение счетчика вызовов

 m_paintCount = m_paintCount + 1

 '--------------------------------------------------------------------------

 'Важно:

 'Вместо того чтобы создавать объект Graphics, мы получаем его

 'на время данного вызова. Это означает, что освобождать память путем вызова

 'метода .Dispose() объекта - не наша забота

 '--------------------------------------------------------------------------

 Dim myGfx As System.Drawing.Graphics

 myGfx = e.Graphics

 'Нарисовать прямоугольник

 myGfx.FillRectangle(m_RectangleBrush, 0, 0, _

  Me.Width, Me.Height)

 'Нарисовать текст

 myGfx.DrawString("Button! Paint: " + m_paintCount.ToString(), _

  Me.Parent.Font, m_TextBrush, 0, 0)

End Sub

End Class

Листинг 11.10. Код, который должен быть помещен в форму для создания экземпляра пользовательского элемента управления
249
{"b":"947732","o":1}