3. События формы и элементов управления
Работа программы строится на основе реакции объекта на какое либо событие. Любому событию обьекта может быть назначена процедура обработки этого события. Например, при нажатии кнопки может открываться другая форма или выполняться какие-то расчеты. Ниже представлены процедуры для событий - щелчкок мышью по кнопкам формы.
Задание 3.1 Создать обработчики событий — процедуры для инициализации самой формы и для элементов управления формы - кнопок.
Действия.
Дважды щелкнуть по форме. Откроется окно кода с заготовкой процедуры обработки события для формы . Выбрать в списке событий (правое поле сверху) событие Initialize() для формы. Заполнить строки между первой и последней строками заготовки инструкциями кода по образцу
Private Sub UserForm_Initialize()
BtnStop.Enabled = False
Image1.Enabled = False
End Sub
Дважды щелкнуть по кнопке Старт. Откроется окно кода с заготовкой процедуры обработки события - щелчок по кнопке BtnStart . Заполнить строки между первой и последней строками заготовки инструкциями кода по образцу
Private Sub BtnStart_Click()
TextBox1.Text = Format(Date, "Dddd,dd mmmm YYYY")
StartTime = Now
TextStart.Text = Format(StartTime, "hh:mm:ss")
BtnStop.Enabled = True
BtnStart.Enabled = False
End Sub
По аналогии создайте обработчик событий для кнопки Стоп по образцу
Private Sub BtnStop_Click()
StopTime = Now
SeansTime = StopTime - StartTime
TextStop.Text = Format(StopTime, "hh:mm:ss")
BtnStop.Enabled = False
Image1.Enabled = True
End Sub
По аналогии создайте обработчик событий для кнопки с рисунком по образцу
Private Sub Image1_Click()
TextSeans.Text = Format(SeansTime, "hh:mm:ss")
Image1.Enabled = False
CommandButton4.Enabled = True
End Sub
По аналогии создайте обработчик событий по образцу для кнопки Выход
Private Sub CommandButton4_Click()
End
End Sub
Программа готова. Нажмите кнопку F5 для запуска программы. Проверьте работоспособность программы.
Результат — не работает кнопка с часами. Почему?
Причина кроется в том, что программа учитывает диапазон действия трех переменных StartTime, StopTime, SeansTime только в области локальных процедур — там, где они инициированы и поэтому доступны. Но переменные StartTime и SeansTime недоступны в процедурах внешних по отношению к тем процедурам, где они впервые были инициированы, т.к. не имеют статуса переменных действующих на уровне модуля. Чтобы исправить эту ошибку, необходимо объявить переменные StartTime и SeansTime в разделе общих объявлений формы.
Дважды щелкнуть по форме. Откроется окно программы. В верхнем списке всех процедур (слева) выбрать — (общая область) и ввести в этой области две инструкции: Dim StartTime As Variant или Private StartTime As Date
Dim SeansTime As Variant или Private SeansTime As Date
Объявленные таким образом переменные StartTime и SeansTime доступны в любой процедуре этой формы. Теперь программа обрабатывает корректно все события.
Самостоятельная работа