Лекция № 35
В VBA кнопки (элементы CommandButton) имеют специальное свойство Cancel, которое определяет кнопку Отмена (независимо от того, называется ли эта кнопка «Отмена»). Только одна кнопка формы может иметь свойство Cancel, установленное равным True. Если задать это свойство для одной из кнопок аналогичное свойство для всех остальных кнопок формы будет установлено равным False. Если форма содержит кнопку с установленным свойством Cancel, то нажатие клавиши Esc приводит к тому же результату, что и щелчок по кнопке. Создадим форму (рис. 9.14).
Рис. 9.14. Простейшее окно программы
Если запустить форму на выполнение, то ни щелчок на кнопке, ни нажатие клавиши Esc, не приведут ни к какому результату, так как с кнопкой не связано никакого события. Но диалоговое окно появится на экране в режиме выполнения и будет создавать впечатление чего-то работающего (рис. 9.14).
Если щелкать кнопки этого окна, то можно убедиться в том, что окно совершенно «нечувствительно» к манипуляциям. Единственная кнопка, которая будет реагировать на действия, находится вверху справа (с изображением перекрестия). Эта кнопка закроет окно.
Чтобы кнопки, помещенные на диалоговой панели, заработали, необходимо для каждой из них написать процедуры обработки событий Click (щелчок на кнопке). Начнем с кнопки Отмена, чтобы всегда иметь возможность выйти из приложения. Свяжем с щелчком на кнопке Отменапрограмму, которая выгрузит форму, что приведет к окончанию работы с диалоговым окном. Для создания процедуры обработки события надо дважды щелкните на кнопке Отмена в режиме разработки в появившемся шаблоне процедуры обработки события ввести оператор выгрузки формы, как это представлено в примере 45.
Пример 45. Процедура обработки события – щелчок на кнопке Отмена
Private Sub CommandButton2_Click()
Unload Me ' Выгружаем форму, заканчивая приложение
End Sub
Если снова запустить форму на выполнение, то появится то же диалоговое окно, что и на рис. 9.14, но теперь это окно – настоящее диалоговое, потому что при щелчке на кнопке Отменавыполняется программа обработки события и окно закрывается. Более того, при нажатии на клавишу Esc получается точно тот результат. Понятно, что процедура обработки события Click (именно это событие и связано с кнопкой) может выполнить и более серьезную работу, чем просто выгрузка формы. Чтобы это было действительно понятно, добавим к процедуре вывод сообщения о том, что возможен выход из диалога (см пример 46).
Пример 46. Процедура обработки события – щелчок на кнопке Отмена
Private Sub CommandButton2_Click()
'объявление переменных
Dim Msg, Title, Response As String
'выдаваемое в окне MsgBox сообщение
Msg = "Хотите закончить работу?"
'состав кнопок и тип значка
Style = vbYesNo + vbCritical + vbDefaultButton2
'заголовок окна
Title = "Выход из программы"
' вызов функции MsgBox с возвращаемым значением
Response = MsgBox(Msg, Style, Title)
'анализ возвращаемого значения
If Response = vbYes Then
Unload Me ' выгрузка формы
End If
End Sub
Если запустите форму с такой процедурой обработки события Click и щелкнуть на кнопке Отменаили нажать клавишу Esc, то на экран будет выдано сообщение, подобное приведенному на рис. 9.15. Эта процедура стала более дружественной, поскольку не сразу заканчивает работу окна диалога. Случайный щелчок на кнопке Отменаили нажатие на клавишу Esc не приведут к окончанию работы с диалогом.
Рис. 9.15. Процедура обработки сообщения от кнопки Отмена
После того, как появилась возможность покинуть диалоговое окно, можно написать простые процедуры обработки событий для кнопок ОКи Справка. Кнопка ОК в начале разработки приложения может быть связана с процедурой, выдающей сообщение о том, что приложение пока не готово к эксплуатации. С кнопкой Справка можно поступить по-разному: например, одним из решений может быть выдача длинного сообщения посредством функции MsgBox, а можно создать новое диалоговое окно с элементом Label, свойством Caption которого будет также длинное сообщение о полезности приложения.
Очень полезной может оказаться процедура обработки события Change – при любом изменении свойств элементов управления (в конечном итоге, все что происходит в диалоговом окне – это изменение тех или иных свойств) выполнять некоторые проверки на допустимость изменений и сообщать пользователю о возможных проблемах. Можно также использовать событие Change для подсказки пользователю о происходящих изменениях со свойствами элементов управления. В качестве примера создадим форму UserForm1 так, чтобы она была похожа на представленную на рис. 9.16. Чтобы соответствующее форме диалоговое окно позволило продолжить работу с приложением, в этом окне необходимо в одном из текстовых полей ввести либо фамилию, либо им пользователя. При изменении содержимого любого поля (свойство Text) инициируется процедура обработки события Change, в которой свойству Enable кнопки OK_button(с заголовком ОК) присваивается значение True. Кнопка OK_button предназначена для изменения свойства Caption формы UserForm2и вывода этой формы на экран. Кнопка с заголовком Отмена всегда доступна и предназначена для выхода из программы. Свойство Cancel этой кнопки имеет значение True.
Рис. 9.16. Форма тестирования события Change
Для создания такой формы выполните следующее:
1. Создать новую форму с именем по умолчанию UserForm1. В Properties Windowизменить свойство Caption этого элемента на Тестирование события Change.
2. Поместить на форму UserForm1 элемент Frame. По умолчанию его имя будет Frame1. Изменить свойство Caption этого элемента на Данные о пользователе. (Размеры элемента не важны.)
3. Поместить на форму в область Frame1 элемент TextBox (с именем по-умолчанию TextBox1) и элемент Label с заголовком (свойство Caption) Фамилия. Имя метки для данного случая не имеет значения.
4. Поместите на форму в область Frame1 элемент TextBox (с именем по-умолчанию TextBox2) и элемент Label с заголовком (свойство Caption) Имя.
5. Поместить на форму элемент CommandButton и изменить его свойство Name на Cancel_button,а свойство Captionна Отмена. Установить свойство Cancel в True, чтобы при нажатии на клавишу Esc программа выполняла ту же процедуру, что и при щелчке на кнопку Отмена.
6. Поместить на форму элемент CommandButton и изменить его свойство Name на OK_button, а свойство Caption на ОК. Изменить свойство Enabled этой кнопки на False. Этим вы кнопка ОК сделается недоступной для пользователя после выдачи диалогового окна на экран в режиме выполнения. Чтобы кнопка стала доступной, и приложение могло выполнить какую-либо работу с использованием кнопки ОК, пользователь должен будет изменить содержимое одного из текстовых окон.
7. Открыть модуль класса формы UserForm1 и записать в него код, представленный в примере 47.
8. Создайте форму UserForm2 (без элементов управления) и запишите в модуль класса этой формы код из примера 44.
Тип элемента | Свойство, которое изменено | Значение | Примечание |
UserForm | Name | UserForm1 | Имя главной формы, на которое можно ссылаться в коде |
Caption | Тестирование события Change | Заголовок окна (формы) в верхней части | |
Frame | Name | Frame1 | Имя, на которое можно ссылаться в коде |
Caption | Данные о пользователе | ||
TextBox | Name | TextBoxl | Имя, на которое можно ссылаться в коде |
Label | Name | Label1 | |
Caption | Фамилия | Заголовок для текстового окна TextBoxl | |
TextBox | Name | TextBox2 | Имя, на которое можно ссылаться в коде |
Label | Name | Label2 | |
Caption | Имя | Заголовок для текстового окна TextBox2 | |
CommandButton | Name | Cance_button | Имя кнопки, на которое можно ссылаться в коде |
Caption | Отмена | Текст на кнопке: кнопка для окончания работы приложения | |
CommandButton | Name | OK_button | |
Caption | OK | Текст на кнопке: кнопка для продолжения работы приложения | |
Enabled | False | Кнопка недоступна для пользователя сразу после выдачи диалогового окна на экран | |
UserForm | Name | UserForm2 | Имя формы, загружаемой из главной при щелчке на кнопке ОК |
Запустим форму на выполнение. Если содержимое текстовых окон не будет редактироваться (изменяться), будет доступна только кнопка Выход. Как только будет изменено содержимое какого-либо текстового окна (Фамилияили Имя), инициируется событие Change и свойству Enabled кнопки ОК будет присвоено значения True (строка 17 примера 47). Так как с кнопкой ОК связана процедура обработки события Click, которая загружает Форму UserForm2, пользователь получает возможность дальнейшей работы При этом свойству Caption формы присваивается сумма содержимого полей TextBox1 и TextBox2.
Пример 47. Обработка события Change
'Обработка события Click кнопки Выход
Private Sub Cancel_button_Click()
MsgBox ("Заканчиваем программу!")
Unload Me
End Sub
'Обработка события Click кнопки OK
Private Sub OK_button_Click()
UserForm2.Show ' загрузка окна UserForm2
'Изменить заголовок диалогового окна UserForm2
UserForm2.Caption = TextBox2.Text + TextBox1.Text
End Sub
'Обработка события Change текстового окна с меткой Фамилия
Private Sub TextBox1_Change()
End Sub
'Обработка события Change текстового окна с меткой Имя
Private Sub TextBox2_Change()
End Sub
Дата добавления: 2015-08-14; просмотров: 533;