'в узел "Neighborhood"
'------------------------------------------------------------------
Sub PopulateTreeViewNeighborhoods(ByVal tnAddTo As TreeNode)
Dim tvControl As TreeView
tvControl = tnAddTo.TreeView
tvControl.BeginUpdate()
'Очистить имеющийся фиктивный узел
tnAddTo.Nodes.Clear()
'Объявить четыре узла, которые мы хотим сделать дочерними узлами
'того узла, который был передан.
Dim newNeighborhoodNodes() As TreeNode
ReDim newNeighborhoodNodes(3)
newNeighborhoodNodes(0) = New TreeNode("Capitol Hill")
newNeighborhoodNodes(1) = New TreeNode("Chelsea")
newNeighborhoodNodes(2) = New TreeNode("Downtown")
newNeighborhoodNodes(3) = New TreeNode("South Bay")
'Добавить дочерние узлы в элемент управления TreeView
tnAddTo.Nodes.AddRange(newNeighborhoodNodes)
tvControl.EndUpdate()
End Sub
Листинг 11.3. Запуск обработчика событий при изменении содержимого элемента TextBox программным путемPrivate m_eventTriggerCount As Integer
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Buttonl.Click
'Запускает событие TextChanged так же,
'как если бы текст был введен пользователем
TextBox1.Text = "Привет, мир"
End Sub
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles TextBox1.TextChanged
m_eventTriggerCount = m_eventTriggerCount + 1
'Обновить надпись для отображения количества событий
Label1.Text = "Событий: #" + CStr(m_eventTriggerCount)
'Внести каждое событие в список
ListBox1.Items.Add(m_eventTriggerCount.ToString() + TextBox1.Text)
End Sub
Листинг 11.4. Использование модели состояний для обновления интерфейса и контроль запуска событий с целью более глубокого изучения процесса обработки событий и управления им'-----------------------------------------
'Для активизации контроля запуска событий:
' #Const EVENTINSTRUMENTATION = 1
'Для отмены контроля запуска событий:
' #Const EVENTINSTRUMENTATION = 0
'-----------------------------------------
#Const EVENTINSTRUMENTATION = 1
'-----------------------------------------------------------------------
'Флаг, указывающий обработчикам событий, должен ли из них осуществляться
'выход без выполнения каких-либо действий
'-----------------------------------------------------------------------
Private m_userInterfaceUpdateOccuring As Boolean
'Счетчики событий
Private m_radioButton1ChangeEventCount As Integer
Private m_textBox1ChangeEventCount As Integer
'-------------------------------------------------------------------------
'Код, который следует включать лишь в том случае, если приложение
'выполняется в режиме контроля запуска событий. Этот код характеризуется
'относительно высокими накладными расходами, и его следует компилировать и
'выполнять только тогда, когда выполняется диагностика.
'-------------------------------------------------------------------------
#If EVENTINSTRUMENTATION <> 0 Then
Private m_instrumentedEventLog As System.Collections.ArrayList
'----------------------------------------------------------------------
'Заносит записи о возникновении событий в массив, который мы
'можем просмотреть
'Примечание: Не делается никаких попыток ограничить размерность массива
' регистрационных записей, поэтому, чем дольше выполняется приложение,
' тем больше становится размер массива
'----------------------------------------------------------------------
Private Sub instrumented_logEventOccurrence(ByVal eventData _
As String)
'Создать журнал событий, если он еще не был создан
If (m_instrumentedEventLog Is Nothing) Then
m_instrumentedEventLog = _
New System.Collections.ArrayList
End If
'Зарегистрировать событие
m_instrumentedEventLog.Add(eventData)
End Sub
'----------------------------------------------------------
'Отобразить список возникших событий
'Примечание: Этот вариант реализации довольно груб.
' Целесообразнее отображать список событий
' в отдельном диалоговом окне, которое специально выводится
' для этого на экран.
'----------------------------------------------------------
Private Sub instrumentation_ShowEventLog() Dim listItems As _
System.Windows.Forms.ListBox.ObjectCollection
listItems = listBoxEventLog.Items
'Очистить список элементов
listItems.Clear()
'При отсутствии событий - выход
If (m instrumentedEventLog Is Nothing) Then
listItems.Add("0 событий")
Return
End If
'Отобразить поверх списка общее количество
'подсчитанных нами событий
listItems.Add(m_instrumentedEventLog.Count.ToString() + _
" событий")
'Перечислить элементы списка в обратном порядке, чтобы
'первыми отображались самые последние из них
Dim logItem As String
Dim listIdx As Integer
For listIdx = _
m_instrumentedEventLog.Count - 1 To 0 Step -1
logItem = CStr(m_instrumentedEventLog(listIdx))
listItems.Add(logItem)
Next
End Sub
#End If
'------------------------------------------------------
'Событие изменения состояния переключателя RadioButton1
'------------------------------------------------------
Private Sub RadioButton1_CheckedChanged(ByVal sender As _