Чтение онлайн

ЖАНРЫ

Программирование мобильных устройств на платформе .NET Compact Framework
Шрифт:

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

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

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. Код, который должен быть помещен в форму для создания экземпляра пользовательского элемента управления

'Наша новая кнопка

Private m_newControl As myButton

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

'Этот код будет подключен в качестве нашего обработчика событий

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

Private Sub CallWhenButtonTurningBlue(ByVal sender As Object, _

ByVal e As System.EventArgs)

MsgBox("Кнопка становится синей!")

End Sub

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

'Эта функция подключается для обработки событий

'щелчка на кнопке Button1

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

Private Sub Button1_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles Button1.Click

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

'Для простоты мы допускаем существование только

'одного экземпляра элемента управления,

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

If Not (m_newControl Is Nothing) Then Return

'Создать экземпляр нашей кнопки

m_newControl = New myButton

'Указать ему его местоположение внутри родительского объекта

m_newControl.Bounds = New Rectangle(10, 10, 150, 40)

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

'Присоединить обработчик событий

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

AddHandler m_newControl.EventButtonTurningBlue, _

AddressOf CallWhenButtonTurningBlue

'Добавить его в список элементов управления данной формы.

'Это сделает его видимым

Me.Controls.Add(m_newControl)

End Sub

Листинг 11.11. Три полезных способа кэширования графических ресурсов

Imports System

Imports System.Drawing

Friend Class GraphicsGlobals

'=======================================================================

'Подход 1: Создать ресурс по требованию

' и кэшировать его для последующего использования.

'

'Внешний код получает доступ к общедоступным свойствам для их просмотра,

'но сами переменные остаются внутренними переменными класса

'=======================================================================

Private Shared s_bluePen As Pen

Public Shared ReadOnly Property globalBluePen As Pen

Get

'Если перо еще не было создано

If (s_bluePen Is Nothing) Then

s_bluePen = New System.Drawing.Pen( _

System.Drawing.Color.Blue)

End If

Return s_bluePen

End Get

End Property

'========================================================

'Подход 2:

'Загрузить глобально и кэшировать все

'используемые объекты Pen, ImageAttribute, Font и Brush

'

'Внешний код получает доступ ко всем общедоступным членам,

'так что никакие функции доступа не нужны.

'=========================================================

Поделиться с друзьями: