#End If
End Sub
Private Sub buttonShowEventLog_Click(ByVal sender As _
System.Object, ByVal e As System.EventArgs) _
Handles buttonShowEventLog.Click
#If EVENTINSTRUMENTATION <> 0 Then
instrumentation_ShowEventLog()
#End If
End Sub
Листинг 11.5. Вызов метода Update() элемента управления для отображения пояснительного текста, информирующего о ходе выполнения задачи
'--------------------------------------------------------------------
'Этот код принадлежит форме, содержащей по одному элементу управления
'Button (button1) и Label (label1)
'--------------------------------------------------------------------
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
'Отобразить курсор ожидания
System.Windows.Forms.Cursor.Current = _
System.Windows.Forms.Cursors.WaitCursor
Dim testString As String
Dim loop3 As Integer
For loop3 = 1 To 100 Step 10
Label1.Text = loop3.ToString() + "% Done..."
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
'Чтобы отобразить информацию о процессе обновления,!
'удалите символы комментария в строке ниже !
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
'Label1.Update()
testString = ""
Dim loop2 As Integer
For loop2 = 1 To 1000
testString = testString + "тест"
Next
Next
Label1.Text = "Готово!"
'Удалить курсор ожидания
System.Windows.Forms.Cursor.Current = _
System.Windows Forms.Cursors.Default
End Sub
Листинг 11.6. Создание изображения на внеэкранной растровой поверхности и передача его в элемент управления PictureBox
'--------------------------------------------------------------------
'Создать рисунок на растровой поверхности. Переслать его в PictureBox
'--------------------------------------------------------------------
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
'Создать новую битовую карту
Dim myBitmap As System.Drawing.Bitmap
myBitmap = New System.Drawing.Bitmap(PictureBox1.Width, _
PictureBox1.Height)
'--------------------------------------------------------------------------
'Создать объект Graphics, чтобы иметь возможность рисовать на битовой карте
'--------------------------------------------------------------------------
Dim myGfx As System.Drawing.Graphics
myGfx = System.Drawing.Graphics.FromImage(myBitmap)
'Закрасить нашу битовую карту желтым цветом
myGfx.Clear(System.Drawing.Color.Yellow)
'Создать перо
Dim myPen As System.Drawing.Pen
rayPen = New System.Drawing.Pen(System.Drawing.Color.Blue)
'-----------------
'Нарисовать эллипс
'-----------------
myGfx.DrawEllipse(myPen, 0, 0, myBitmap.Width - 1, _
myBitmap.Height - 1)
'Создать сплошную кисть
Dim myBrush As System.Drawing.Brush
'-----------------------
'Нарисовать текст кистью
'-----------------------
myBrush = New System.Drawing.SolidBrush( _
System.Drawing.Color.Black)
'Примечание: мы используем объект Font из формы
myGfx.DrawString("Привет!", Me.Font, myBrush, 2, 10)
'------------------------------
'Важно! Очистить все после себя
'------------------------------
myGfx.Dispose()
myPen.Dispose()
myBrush.Dispose()
'-------------------------------------------------------------------
'Указать объекту pictureBox, на необходимость отображения растрового
'изображения, которое мы только что создали и нарисовали.
'-------------------------------------------------------------------
PictureBox1.Image = myBitmap
End Sub
Листинг 11.7. Создание объекта Graphics для формы
'----------------------------------------------------------
'Создает объект Graphics для формы и осуществляет рисование
'----------------------------------------------------------
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
'Создать объект Graphics для формы
Dim myGfx As System.Drawing.Graphics
myGfx = Me.CreateGraphics()
'Создать кисть
Dim myBrush As System.Drawing.Brush
myBrush = New System.Drawing.SolidBrush( _
System.Drawing.Color.DarkGreen)
'Заполнить прямоугольник
myGfx.FillRectangle(myBrush, 4, 2, 60, 20)
'-------------------------
'Важно: Выполнить очистку!
'-------------------------
myBrush.Dispose()
myGfx.Dispose()
End Sub
Листинг 11.8. Подключение к функции Paint формы
'Кисти, которые мы хотим кэшировать, чтобы избавить себя от необходимости
'все время создавать их и уничтожать
Private m_brushBlue As System.Drawing.Brush
Private m_brushYellow As System.Drawing.Brush
'Ради интереса подсчитаем, сколько раз осуществлялся вызов
Private m_paintCount As Integer
'-----------------------------------------------------------------------------
'Мы перекрываем обработчики событий Paint наших базовых классов. Это означает,
'что каждый раз, когда форма вызывается для перерисовки самой себя, будет
'вызываться эта функция.
'-----------------------------------------------------------------------------
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
'ВАЖНО: Вызвать базовый класс и дать ему возможность
'выполнить всю необходимую работу по рисованию
MyBase.OnPaint(e)
'Увеличить на 1 значение счетчика вызовов
m_paintCount = m_paintCount + 1
'--------------------------------------------------------------------------
'Важно:
'Вместо того чтобы создавать объект Graphics, мы получаем его
'на время данного вызова. Это означает, что освобождать память путем вызова
'метода .Dispose() объекта - не наша забота
'--------------------------------------------------------------------------
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)
'------------------------------------------------------