Шрифт:
События форм. Необходимо помнить, что создание элемента — только начало работы над формой. Подавляющее большинство элементов сами по себе элемент никаких действий не выполняют, за исключением тех, которые их определяют. Кнопка — нажимается под мышкой или Enter'ом, список показывает значения, бегунок на полосе прокрутки двигается, во флажке можно поставить и убрать галку, но не более того! (Разве что "Windows Media Player" играет сам по себе.)
Для того, чтобы элемент выполнял какое-нибудь действие при действии с ним, нужно написать для него программу реакции на события.
Событий, могущих произойти с элементом, много. Это и двойной щелчок мыши на нем, это и проводка мыши над ним, это и ввод текста в поле ввода, это и нажатие на вкладке, это и переход к другому элементу, и многое другое.
Для того, чтобы написать программу обработки реакции на событие, нужно два раза щелкнуть на элементе. Откроется окно написания программ реакций на события, и автоматически написанная заготовка будет иметь вид:
Private Sub CommandButtonl_Click
End Sub
Теперь в текст этой процедуры можно вводить команды, которые выполнятся, если событие в заголовке — Click мыши — произойдет. Это событие считается стандартным для кнопок, флажков, рисунков, рамок, переключателей и окон отображения текста. Для остальных стандартных элементов — полей ввода текста, полос прокрутки, счетчиков и др. — стандартным считается событие Change, то есть их изменение, а для дополнительных элементов управления — те события, которые заданы таковыми их создателями.
Список возможных событий для элемента можно получить, поставив курсор внутрь процедуры обработки стандартного события и выбрав нужное из выпадающего меню справа вверху окна написания программы (рис. 4.23). В выпадающем меню слева вверху этого окна указаны все процедуры и функции программы реакции формы на события.
Рис. 4.24. Выпадающий список событий.
В программе реакции формы на события могут быть и другие процедуры и функции, не связанные с элементами формы.
У некоторых событий есть параметры, с которыми информация об его происшествии передается программе. Так, процедура обработки события KeyDown (то есть нажатия какой-либо клавиши тогда, когда активен данный элемент) имеет вид
Private Sub CommandButtonl_KeyDown(ByVal KeyCode As MSForms.Returnlnteger, ByVal Shift As Integer)
End Sub
Переменная KeyCode будет после срабатывания данной процедуры будет иметь значение, равное коду нажатой клавиши, а переменная Shift — 1, если соответствующая клавиша была нажата, и 0, если нет. Эти переменные можно использовать в процедуре обработки события.
Подавляющее большинство свойств (для стандартных элементов управления — все), задаваемых в Окне свойств, можно изменять и из программы. Например, команда TextBox1.Enabled=True даст возможность пользователю ввести текст в поле ввода TextBox1, а команда CheckBox1.Value=False уберет галку из флажка с именем CheckBox1. Эта возможность делает формы Visual Basic for Applications динамическими — то есть содержимое форм может меняться немедленно в ответ на действия пользователя без выгрузки и повторной загрузки формы. Форма может работать как обычное диалоговое окно программы для Windows — например, выбор пользователем значения из списка может каждый раз выводить в форму какой-либо текст, разный для разных значений.
Наиболее часто возможность создания динамических форм используется для инактивации элементов, не могущих быть использованными при каких-либо условиях. К примеру, в форме, состоящей из поля ввода текста и кнопки, вызывающей процедуру вычисления квадратного корня, кнопка может становиться неактивной и не реагирующей на нажатия, если число, введенное в поле ввода, отрицательное.
Для просмотра формы в режиме выполнения (то есть так, как она будет выглядеть в готовой программе) надо нажать клавишу F5 — ту же, что и для запуска на выполнение обычной программы. Все средства отладки, описанные выше, работают и при отладке форм.
Для вызова формы из программы следует поместить в ее текст команду ИмяФормы. Show.
Стоит иметь в виду, что после выгрузки формы из памяти (командой Unload Me в одном из обработчиков событий формы) все переменные, описанные в программе реакции формы на события, обнуляются. Поэтому после выгрузки формы получить от нее какие-либо данные уже нельзя. Если в результате работы формы в основную программу должны передаваться какие-либо данные, то нужно в основной программе объявить несколько переменных с помощью инструкции Public, а затем в программе реакции формы на события записать в них всю необходимую информацию, полученную от пользователя, и использовать значения этих переменных в основной программе.