5.1. Создание форм. Свойства, события и методы форм
Форма – это главный объект, образующий визуальную основу приложения. По своей сути форма представляет собой окно, в котором можно размещать различные управляющие элементы при создании приложений. Для создания формы необходимо выполнить команду Вставка UserForm. В окне Конструктора форм появится форма, имеющая стандартный вид для ОС Windows (рис. 5.1).
Как и любой другой объект VBA форма имеет набор свойств, основные из которых приведены в таблице 5.1. Для получения справки по любому свойству достаточно выделить его в окне свойств и нажать F1.
Таблица 5.1. Основные свойства формы
Свойство |
Описание |
BackColor |
Цвет фона для формы. |
BorderStyle |
Определяет тип границы, окружающей форму |
Caption |
Текст, который выводится в заголовке формы. |
Font |
Определяет тип и вид шрифта в форме. |
Height |
Определяет высоту формы в твипах. |
(Name) |
Имя объекта, для программы VBA. |
Width |
Определяет ширину формы в твипах. |
Свойства можно изменять в режиме конструирования в окне свойств, либо программно в режиме выполнения. Например, в ходе выполнения программы можно изменить заголовок формы командой:
frmForm1.Caption = "Привет"
Программы для компьютера в ОС Windows управляются событиями. Каждый раз, когда нажимается кнопка, перемещается мышь, изменяются размеры формы и т.д., ОС генерирует сообщение. Сообщение доставляется соответствующему объекту, например форме, а та генерирует соответствующее событие. Следовательно, можно составить фрагмент программы, в котором объект будет реагировать на событие определенным образом, т.е. любому стандартному событию соответствует определенная процедура. Чтобы просмотреть события связанные с формой, необходимо в режиме конструирования дважды щелкнуть на ней – появится окно программы, в котором щелкнуть на списке Процедура. В табл. 5.2 приведены наиболее часто используемые события.
Таблица 5.2. Основные события форм
Событие |
Описание |
Initialize |
Происходит во время конфигурации и до загрузки формы в память. |
Activate |
Происходит после загрузки формы в память. |
Deactivate |
Происходит, если форма перестает быть активной. |
Click |
Происходит при нажатии левой кнопки мыши на форме. |
Следующий пример изменяет заголовок формы при активизации, и уменьшает размер формы после щелчка левой кнопкой мыши на форме.
Private Sub UserForm_Activate()
frmForm1.Caption = "Щелчок на форме уменьшает её размеры"
End Sub
Private Sub UserForm_Click()
frmForm1.Width = frmForm1.Width / 2
frmForm1.Height = frmForm1.Height / 2
frmForm1.Caption = "Сделай это еще раз!"
End Sub
Также форма обладает набором методов и инструкций. Метод определяет действие, которое может быть выполнено с объектом. Инструкция инициирует действие. Она может выполнить метод или функцию, В табл. 5.3 и 5.4 приведены наиболее часто используемые методы и инструкции для работы формами.
Таблица 5.3. Основные методы форм
Метод |
Описание |
Hide |
Скрывает объект UserForm, но не выгружает его. |
Show |
Выводит на экран объект UserForm. |
Таблица 5.4. Основные инструкции форм
Инструкция |
Описание |
Load |
Загружает объект UserForm, но не отображает его на экране. |
Unload |
Удаляет объект UserForm из памяти. |
В следующем примере предполагается, что в проекте созданы две формы frmForms. При запуске проекта происходит событие Initialize для формы frmForm1, форма frmForm2 загружается и выводится на экран. Когда при помощи мыши выбирается frmForm2, она делается невидимой, и появляется форма frm Form1. Если же выбирается frmForm1, frmForm2 появляется вновь.
'Событие Initialize формы frmForm1.
Private Sub UserForm_Initialize()
Load frmForm2
frmForm2.Show
End Sub
' Событие Click для формы frmForm2
Private Sub UserForm_Click()
frmForm2.Hide
End Sub
' Событие Click для формы frmForm1
Private Sub UserForm_Click()
frmForm2.Show
End Sub
5.2. Выбор и использование управляющих элементов
Создание управляющих элементов на форме выполняется с помощью Панели инструментов, которая выводится на экран командой Вид Панель элементов (рис. 5.2).
С помощью кнопок этой панели можно поместить в форму необходимый элемент управления. Для этого нужно щелкнуть на значке элемента управления, далее при нажатой левой кнопке мыши определить размер и место расположения элемента в форме. Когда элемент на форме выделен (рамка объекта содержит маленькие прямоугольники) можно изменять его размеры и перемещать с помощью мыши, а также просматривать и изменять его свойства в окне свойств.
Каждый управляющий элемент (объект) характеризуется набором свойств (которые можно изменять в режимах конструирования или выполнения), событий и методов.
Для каждого объекта проекта необходимо определить его имя. В соответствии с общепринятыми соглашениями об именах объектов первые три символа имени должны отражать вид элемента, а остальные символы - назначение. В табл. 5.5. представлены сочетания первых трех символов для наиболее часто используемых элементов.
Таблица 5.5. Рекомендуемые сочетания первых трех символов имен
Объект |
Первые 3 символа имени |
Пример имени |
Форма |
frm |
frmMyForm |
Надпись |
lbl |
lblInfo |
Текстовое поле |
txt |
txtInput |
Командная кнопка |
cmd |
cmdExit |
Флажок |
chk |
chkSound |
Переключатель |
opt |
optLevel |
Список |
lsb |
lsbTypes |
Рамка |
fra |
fraChoices |
Полоса прокрутки |
vcb |
vcbSpeed |
Рисунок |
pic |
picChema |
Командная кнопка является самым распространенным элементом управления, и может использоваться для организации выполнения вычислений и других действий, вызова процедур и функций пользователя, открытия форм и т.д. Основные свойства командной кнопки представлены в табл. 5.6. В свойстве Caption можно ставить символ & перед буквой, которая будет использоваться в сочетании с клавишей Alt для ускоренного доступа к кнопке. Также можно перейти к кнопке клавишей Tab, а затем нажать Enter.
Таблица 5.6. Свойства командных кнопок
Свойство |
Описание |
BackColor |
Цвет фона кнопки. |
Caption |
Текст, который выводится на кнопке. |
Enabled |
Значение False делает кнопку недоступной. |
Font |
Определяет тип и вид шрифта на кнопке. |
ForeColor |
Определяет цвет шрифта на кнопке. |
(Name) |
Имя объекта, для программы VBA. |
Picture |
Добавляет рисунок на кнопку. |
PicturePosition |
Определяет расположение текста и рисунка на кнопке. |
Visible |
Значение False делает кнопку невидимой. |
Основным событием кнопки является Click. Для написания программного кода, который будет выполняться при нажатии командной кнопки, достаточно два раза щелкнуть на ней левой кнопкой мыши в режиме конструирования проекта.
Наиболее полезным методом командной кнопки является SetFocus, позволяющий вернуться к кнопке (передать ей фокус). Например, следующая команда позволяет вернуться к кнопке по умолчанию после ввода данных в текстовое поле: cmdMyButtum.SetFocus
Текстовое поле применяется для ввода или вывода информации. Основные свойства текстового поля представлены в табл. 5.7.
Таблица 5.7. Свойства текстового поля
Свойство |
Описание |
Enabled |
Значение False делает поле недоступным. |
Font |
Определяет тип и вид шрифта в текстовом поле. |
ForeColor |
Определяет цвет шрифта в текстовом поле. |
(Name) |
Имя объекта, для программы VBA. |
MaxLength |
Определяет количество вводимых символов в текстовое поле. |
PasswordChar |
Определяет символ, отображаемый при вводе в текстовое поле. |
Text |
Определяет содержимое текстового поля. |
Например, для очистки содержимого текстового поля в ходе выполнения программы необходимо ввести в требуемом месте программного кода команду:
txtResult.Text=" "
Основным событием текстового поля является Change, происходящее при вводе или удалении символов. Например, команду cmdMyButtum.SetFocus можно поместить в процедуру события Change текстового поля.
Надпись применяется как самостоятельно для вывода справочной информации, так и в виде "подсказок" для текстового поля, списка или другого элемента. Главное её отличие от текстового поля в том, пользователь не может изменить текст надписи (хотя его можно изменить как свойство во время выполнения программы). Основные свойства надписи представлены в табл. 5.8.
Таблица 5.8. Свойства надписи
Свойство |
Описание |
Caption |
Определяет текст, содержащийся в надписи. |
Font |
Определяет тип и вид шрифта надписи. |
ForeColor |
Определяет цвет шрифта надписи. |
(Name) |
Имя объекта, для программы VBA. |
Picture |
Добавляет рисунок в надпись. |
PicturePosition |
Определяет расположение текста и рисунка надписи. |
Список позволяет работать с перечнем из нескольких вариантов. Пользователь может просмотреть содержимое списка и выбрать один из вариантов для последующей обработки. Прямое редактирование содержимого списка невозможно. Если в списке помещаются не все строки, то автоматически добавляется вертикальная полоса прокрутки. Основные свойства списка представлены в табл. 5.9.
Таблица 5.9. Свойства списка
Свойство |
Описание |
(Name) |
Имя объекта, для программы VBA. |
ListIndex |
Возвращает номер текущей выделенной строки списка -1. |
Text |
Содержимое текущей выделенной строки списка. |
Для списка чаще всего используются события Click и DblClick (двойной щелчок левой кнопкой мыши на одной из строк списка). Во втором случае пользователь одновременно выделяет строку и начинает ее обработку.
Работа со списком начинается с его заполнения методом AddItem, который может вызываться несколько раз подряд. Часто метод AddItem помещается в процедуру UserForm_Initialize(), чтобы список заполнялся при загрузке формы. Метод RemoveItem удаляет строки из списка. Метод Clear очищает сразу весь список. Следующий пример показывает, как работают списки, при этом предполагается, что в проекте создана форма с двумя списками (List1 и List2). Двойной щелчок на любой строке одного списка перемещает её в другой список. Строка включается в другой список до того, как она будет удалена из текущего.
Private Sub UserForm_Initialize()
List1.AddItem "Стол"
List1.AddItem "Стул"
List1.AddItem "Диван"
List1.AddItem "Кресло"
List1.AddItem "Кровать"
End Sub
Private Sub List1_DblClick()
List2.AddItem List1.Text
List1.RemoveItem
List1.ListIndex
End Sub
Private Sub List2_dblClick()
List1.AddItem List2.Text
List2.RemoveItem
List2.ListIndex
End Sub
Переключатели позволяют выбрать один вариант из группы. Обычно они группируются в рамках (см. далее), однако их можно располагать прямо на форме, если используется только одна группа переключателей. Основные свойства переключателя представлены в табл. 5.10.
Таблица 5.10. Свойства переключателя
Свойство |
Описание |
Caption |
Задает текст, определяющий назначение переключателя. |
(Name) |
Имя объекта, для программы VBA. |
Value |
Значение True указывает, что переключатель выбран. |
Наиболее важным является свойство Value значение True (переключатель находится в установленном состоянии), которого в режиме конструирования задается только у одного переключателя в группе. В режиме выполнения это свойство чаще всего проверяется в процедуре события Click кнопки, нажатой после установки нужного переключателя, что позволяет проверить перед вызовом следующей процедуры некоторое условие. Однако определенные действия можно выполнять сразу же после выбора переключателя в процедуре его события Click.
Флажок частично аналогичен переключателю, но в отличие от него может использоваться как отдельный самостоятельный элемент. Даже объединенные в группу флажки работают независимо друг от друга. Основные свойства флажков такие же, как и у переключателя (см. табл. 5.10). Однако свойство Value может принимать три значения (флажок находится в установленном состоянии, снятом или неопределенном).
Наиболее часто используемым событием флажков является Click, в процедуре которого можно проверять состояние флажка по свойству Value. Следующий пример иллюстрирует работу флажков, при этом предполагается, что в проекте создана форма с двумя флажками (ChkBold и ChkInalic) и текстовым полем TxtExam (рис.5.3). После ввода символов в текстовое поле, с помощью флажков можно делать текст полужирным или курсивом. Свойства FontBold и FontItalic текстового поля устанавливают способы начертания текста.
Рис. 5.3. Использование флажков
Private Sub Chkbold_Click()
If ChkBold.Value = True Then
TxtExam.FontBold = True
Else
TxtExam.FontBold = False
End If
End Sub
Private Sub ChkItalic_Click()
If ChkBold.Value = True Then
TxtExam.FontItalic = True
Else
TxtExam.FontItalic = False
End If
End Sub
Рамка используется для группировки переключателей или флажков, и помещается на форму раньше элементов, находящихся внутри неё. Переключатели находящиеся внутри рамки, работают как самостоятельная группа и не влияют на состояние переключателей в других рамках. Основным свойством рамки является Caption, которое задает текст, определяющий назначение элементов в рамке.
Рисунок используется для простейшего вывода изображения на форме. Он может отображать растровые файлы (.BMP), значки (.ICO), метафайлы (WMF), а также файлы в формате JPEG (.JPG) и GIF (.GIF). Основные свойства рисунка представлены в табл. 5.11.
Таблица 5.11. Свойства рисунка
Свойство |
Описание |
Autosize |
Значение True подгоняет размер элемента под размер содержимого. |
(Name) |
Имя объекта, для программы VBA. |
Picture |
Задает файл для рисунка. |
События и методы рамок и рисунков практически не используются.