Лекция № 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; просмотров: 541;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.014 сек.