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
'
'Внешний код получает доступ ко всем общедоступным членам,
'так что никакие функции доступа не нужны.
'=========================================================
Public Shared g_blackPen As Pen
Public Shared g_whitePen As Pen
Public Shared g_ImageAttribute As Imaging.ImageAttributes
Private Shared s_alreadyInitialized As Boolean
Public Shared g_boldFont As Font
Public Shared g_smallTextFont As Font
Public Shared g_greenBrush As Brush
Public Shared g_yellowBrush As Brush
Public Shared g_redBrush As Brush
Public Shared g_blackBrush As Brush
'==============================================================
'Эта функция должна быть вызвана до попыток доступа к любому из
'вышеперечисленных глобальных объектов
'==============================================================
Public Shared Sub InitializeGlobals()
If (s_alreadyInitialized = True) Then Return
g_blackPen = New Systera.Drawing.Pen(Color.Black)
g_whitePen = New System.Drawing.Pen(Color.White)
g_ImageAttribute = New _
System.Drawing.Imaging.ImageAttributes
g_ImageAttribute.SetColorKey(Color.White, Color.White)
g_boldFont = New Font(FontFamily.GenericSerif, _
10, FontStyle.Bold)
g_smallTextFont = New Font(FontFamily.GenericSansSerif, _
8, FontStyle.Regular)
g_blackBrush = New SolidBrush(System.Drawing.Color.Black)
g_greenBrush = New SolidBrush(System.Drawing.Color.LightGreen)
g_yellowBrush = New SolidBrush(System.Drawing.Color.Yellow)
g_redBrush = New SolidBrush(System.Drawing.Color.Red)
s_alreadyInitialized = True
End Sub
'====================================================
'Подход 3: Возвратить массив связанных ресурсов.
' Кэшировать ресурсы локально, чтобы при многократных
' запросах не загружались (напрасно) их дубликаты
'====================================================
Private Shared m_CaveMan_Bitmap1 As Bitmap
Private Shared m_CaveMan_Bitmap2 As Bitmap
Private Shared m_CaveMan_Bitmap3 As Bitmap
Private Shared m_CaveMan_Bitmap4 As Bitmap
Private Shared m_colCaveManBitmaps As _
System.Collections.ArrayList
'--------------------------------------------------
'Создать и загрузить массив изображений для спрайта
'--------------------------------------------------
Public Shared Function g_CaveManPictureCollection() As _
System.Collections.ArrayList
'Изображения загружаются лишь в том случае, если мы их еще не загрузили
If (m_CaveManBitmap1 Is Nothing) Then
'-----------------------------------------------------------------
'Загрузить изображения. Эти изображения хранятся в виде
'встроенных ресурсов в нашем двоичном приложении
'
'Загрузка изображений из внешних файлов осуществляется аналогичным
'образом, но выполнить ее проще (нам достаточно лишь указать
'имя файла в конструкторе растровых изображений).
'-----------------------------------------------------------------
'Получить ссылку на нашу двоичную сборку
dim thisAssembly as System.Reflection.Assembly = _
System.Reflection.Assembly.GetExecutingAssembly()
'Получить имя сборки
Dim thisAssemblyName As System.Reflection.AssemblyName = _
thisAssembly.GetName()
Dim assemblyName As String = thisAssemblyName.Name
'Загрузить изображения в виде двоичных потоков из нашей сборки
m_CaveMan_Bitmap1 = New System.Drawing.Bitmap( _
thisAssembly.GetManifestResourceStream( _
assemblyName + ".Hank_RightRun1.bmp"))
m_CaveMan_Bitmap2 = New System.Drawing.Bitmap( _
thisAssembly.GetManifestResourceStream( _
assemblyName + ".Hank_RightRun2.bmp"))
m_CaveMan_Bitmap3 = New System.Drawing.Bitmap( _
thisAssembly.GetManifestResourceStream( _
assemblyName + ".Hank_LeftRunl.bmp"))
m_CaveMan_Bitmap4 = New System.Drawing.Bitmap( _
thisAssembly.GetManifestResourceStream( _
assemblyName + ".Hank_LeftRun2.bmp"))
'Добавить их в коллекцию
m_colCaveManBitmaps = New System.Collections.ArrayList
m_colCaveManBitmaps.Add(m_CaveMan_Bitmap1)
m_colCaveManBitmaps.Add(m_CaveMan_Bitmap2)
m_colCaveManBitmaps.Add(m_CaveMan_Bitmap3)
m_colCaveManBitmaps.Add(m_CaveMan_Bitmap4)
End If
'Возвратить коллекцию
Return m_colCaveManBitmaps
End Function
End Class
Примеры к главе 13 (проектирование пользовательского интерфейса)
#Const PLAYFIELD_ON_BOTTOM = 0 'Отобразить ПОЛЕ ИГРЫ под ПИ
'#Const PLAYFIELD_ON_BOTTOM = 1 'Отобразить ПОЛЕ ИГРЫ над ПИ
'-------------------------------------------------
'ОБРАБОТЧИК СОБЫТИЙ: Вызывается при загрузке формы
'-------------------------------------------------
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
'Задать совместно используемые свойства нашего визуального интерфейса
SetStartControlPositionAndState()
'Задать динамические свойства, исходя из того, в какое состояние