Рис. 19.9. Изменение порядка следования вкладок формы
Вы можете добавить действительно забавные эффекты, которые будут происходить при переходе от одной вкладки к другой. Вы можете заставить элементы управления постепенно появляться на вкладке от одного из ее краев, или постепенно проявляться новую вкладку на фоне старой. Для того чтобы увидеть все эти эффекты, вам следует выполнить форму.
Для добавления специальных эффектов для перехода между вкладками формы выполните следующие действия.
1. Выберите необходимую вкладку.
2. В окне свойств выберите один из необходимых эффектов перехода из раскрывающегося списка TransitionEffeet.
3. Задайте временной интервал (в миллисекундах) выполнения эффекта с помощью свойства TransitionPeriod.
Если значение свойства TransitionPeriod равно 0, эффект отключен. Если же значение будет равно 500 (полсекунды), вы увидите эффект, но при этом задержек в работе программы не будет.
Совет о кнопках выбора
Обычно все кнопки выбора в определенной части формы (рамке, вкладке, или основной части формы) принадлежат одной группе. Однако, используя свойство GroupName, вы сможете определить несколько групп в одной и той же части формы. Вам необходимо только присвоить свойству GroupName одно и то же значение для определенных элементов управления.
Флажки
Для удобства работы пользователя вам следует визуально объединять наборы связанных флажков, чтобы пользователь всегда мог видеть, что определенные флажки относятся к одной группе. Для этого лучше всего подходят рамки.
Поскольку каждый флажок функционирует независимо от других, вам не стоит беспокоиться об их группировании каким-либо другим способом. Однако, если хотите, вы можете идентифицировать их как члены одной группы, указав одинаковое значение свойства
GroupName для всех флажков одной группы. Это позволит вам намного проще определять принадлежность флажков при дальнейшем проектировании формы.
Когда вы увеличиваете уровень громкости звуковой системы или выключаете термостат нагревателя, вы используете настоящий элемент управления для выбора значения из диапазона доступных значений. В форме действие таких элементов имитируется с помощью полос прокрутки и кнопок со стрелками. Соответствующие примеры приведены на рис. 19.10.
Рис. 19.10. В этом диалоговом окне полосы прокрутки и кнопки со стрелками используются для выбора различных значений
Конечно же, полосы прокрутки в среде Windows преимущественно используются для прокрутки видимой части документа или диалогового окна, если все представленные сведения не помещаются сразу. Но вы можете представить себе полосу прокрутки в более общем варианте: как элемент управления в виде бегунка, который позволяет прокручивать целый диапазон значений. Для выбора значения пользователь перетаскивает бегунок или щелкает на кнопке со стрелкой в ту или другую сторону.
Кнопки со стрелками чем-то напоминают полосы прокрутки, в которых собственно полоса и бегунок исчезли, а остались только кнопки. Подобные кнопки не позволяют прокручивать документ; они позволяют только выбирать значения.
Полосы прокрутки и кнопки со стрелками реагируют как на нажатие клавиш на клавиатуре, так и на щелчки мышью. Другими словами, вам не нужно программировать для них процедуры обработки событий для определения значений этих элементов управления, выбираемых в результате того или иного действия пользователя. Однако вам придется рассказать программе о том, что же необходимо делать с измененным значением.
Вы размещаете полосы прокрутки и кнопки со стрелками в форме точно так же, как и любые другие элементы управления: щелкая на соответствующем значке в диалоговом окне Toolbox, после чего перетаскивая его на нужное место в форме. Однако при работе с полосами прокрутки и кнопками со стрелками необходимо помнить о некоторых нюансах.
И полосы прокрутки, и кнопки со стрелками можно ориентировать как по вертикали, так и по горизонтали. По умолчанию VBA определяет ориентацию элементов управления автоматически, основываясь на том, как именно вы перетаскиваете элемент управления. Если ширина элемента управления больше его высоты, ориентация горизонтальная. И наоборот, если ширина элемента управления меньше его высоты, ориентация вертикальная. VBA ориентирует элемент управления при каждом изменении этих параметров.
Если вы хотите получить широкую вертикальную полосу прокрутки, вы сможете строго задать необходимую ориентацию, воспользовавшись свойством Orientation.
После того как вы разместили полосу прокрутки или кнопки со стрелками в форме, вы должны выполнить две задачи, чтобы эти элементы управления работали должным образом.
* Вы должны указать диапазон значений, из которого пользователь сможет выбирать с помощью элемента управления.
* Вы должны обеспечить обратную визуальную связь с пользователем, чтобы он мог легко видеть, какое именно значение он выбрал в данный момент.
Используйте свойства Мах и Min полосы прокрутки или кнопок со стрелками для определения диапазона доступных значений. Эти свойства могут принимать только целые значения.
Имейте в виду, что несмотря на свои названия, свойства Мах и Min относятся к расположению элемента управления, а не к числовым минимальным и максимальным значениям; значение свойства свойства Мах может быть меньше значения свойства Min. Свойство Min относится к кнопке со стрелкой вниз. (Я настоятельно рекомендую вам поэкспериментировать с этими элементами управления.)
Полосы прокрутки или кнопки со стрелками бесполезны до тех пор, пока пользователь не будет точно знать, какое же значение он выбрал. На рис. 19.11 приведено несколько примеров того, что пользователь видит, а также того, что он не должен видеть.
К сожалению, ни один элемент управления не создается со стандартным диапазоном значений.
Для того чтобы связать значение, выбранное с помощью полосы прокрутки или кнопок со стрелками, с другим элементом управления, таким как текстовое поле, вам придется немного попрограммировать. Чаще всего мы обойдемся добавлением всего одной строки кода. Приведенный ниже фрагмент кода передает значение, полученное с помощью полосы прокрутки sclWarpFactor подписи lblScroll Bar Readout, после щелчка на бегунке полосы прокрутки:
Private Sub sclWarpFactor_Click
lblScrollBarReadout.Caption = sclWarpFactor.Value
End Sub
Обратите внимание, что для организации немедленной обратной записи, код, отображающий выбранное значение с помощью другого элемента управления, должен быть включен в процедуру обработки события Click, как и было показано выше.
Риc. 19.11. Диалоговое окно, показанное на рис. 19.10, претерпело некоторые улучшения
Дополнительно о программировании форм
Программирование форм - это действительно высокое искусство. Очень сложно создать форму, которая будет вести себя так, как вы того ожидаете, не говоря уже о пользователе.
Сведения, изложенные в настоящей главе, должны помочь вам лучше и быстрее достичь поставленной цели.
Использование переменных для ссылок на формы
Хотя в программном коде можно ссылаться на форму непосредственно по ее имени, не исключено, что вы предпочтете использовать для этого переменную. Например, чтобы уменьшить объем необходимого печатания, когда у формы длинное имя, или чтобы ускорить выполнение программы, когда в ней приходится отображать формы из разных проектов.
Поскольку формы являются объектами, к ним применима техника работы с объектами, рассмотренная в главе 10. Следующая процедура иллюстрирует процесс. Обратите внимание, что переменная должна объявляться как конкретная форма, а не как родовой объект User Form:
Sub FormVariableDemo()
Dim frml As FormAnOpinion
Set frml = FormAnOpinion
' Изменение свойств и вызов методов с помощью переменной:
With frml
.Caption = "Все указанное выше"
. Show
End With
End Sub
Строго говоря, оператор Set создает отдельную копию, или экземпляр, формы, присваивая его заданной вами переменной. Таким образом можно отображать несколько копий одной и той же формы, каждая из которых будет со своими собственными значениями в элементах управления. Для создания дополнительных экземпляров формы нужно использовать ключевое слово New. Вот как это выглядит:
' объявление переменных для форм
Dim frmOne As MultiForm
Dim frmTwo As MultiForm
' заполнение каждой переменной своим экземпляром формы
Set frmOne = MultiForm
Set frmTwo = New MultiForm ' Здесь используется New
' отображение двух экземпляров форм
frmOne . Show
frmTwo.Show
Распознавание нажатий клавиш
Используйте события KeyPress, KeyDown и KeyUp, чтобы отвечать на нажатия клавиш пользователем. Событие KeyPress удобно использовать для распознавания клавиш с обычными "печатаемыми" символами (буквы, числа, знаки пунктуации), когда нужно обработать информацию, вводимую в текстовое поле или в поле со списком. С помощью этого события распознаются также многие из комбинаций типа <Ctrl+клавиша>, а также клавиша <Backspace>. Немного позже я покажу, как проверить или изменить напечатанный символ с помощью процедуры обработки события KeyPress.