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


«VBA Элементы управления в приложениях VBA»

Файл: 4 КБ
Поделиться:
Кнопки как основа выполнения действий
Наиболее простой путь обеспечить взаимодействие пользователя с приложением - предусмотреть наличие кнопок, нажатие которых будет вызывать необходимые действия. Для этих целей можно использовать элемент управления Command Button (Кнопка управления), предоставляемый системой VBA, или разработать собственную "кнопку", используя элемент управления Image (Изображение), содержащий графику (значок).
Кнопки управления
Большинство приложений VBA имеет кнопки управления, простым нажатием которых пользователь может выполнять разнообразные действия. Когда пользователь нажимает кнопку, то не только выполняется соответствующее ей действие, но и она сама выглядит так, как будто ее вдавливают, а потом отпускают. При щелчке на кнопке вызывается событие click (Щелчок). Для выполнения определенных действий при щелчке на кнопке в процедуру обработки события click помещается соответствующий код.
Существует много способов "нажать" кнопку управления во время выполнения:
 Использовать мышь, щелкнув на кнопке
 Переместить фокус на кнопку, нажимая клавишу ТаЬ, и затем выбрать эту кнопку, нажав клавишу Spacebar (пробел) или Enter (ввод) .
 Нажать клавишу доступа (Аlt+<подчеркнутая буква в названии клавиши>) к данной для кнопки управления.
 Нажать кнопку управления программным путем, для чего любым способом (вручную с помощью окна свойств или с помощью оператора в программе) установить значение свойства value (Значение) кнопки управления равным True (Истина), а затем с помощью оператора в программе вызвать процедуру обраьотки события click для этой кнопки.
 Если кнопка управления является кнопкой управления по умолчанию , выбрать эту кнопку, нажав клавишу Enter даже если в фокусе в данный момент оказывается другой элемент управления.
 Если кнопка управления no умолчанию является кнопкой отказа (cancel button), то, где бы не находился фокус, выбрать эту кнопку можно, нажав клавишу Esc.
Все эти действия заставляют систему VBA вызывать процедуру обработки события click.
Элементы управления для отображения и ввода текста
Элементы управления Label (Метка) и TextBox (Текстовое поле) применяются для отображения или ввода текста. Метки используются для отображения текста на форме, а текстовые поля - когда необходимо предоставить пользователю возможность вводить текст. Текст в метках можно только читать, тогда как текст в текстовых полях можно редактировать. Назначение элементов управления поясняет табл.
Таблица. Назначение элементов управления для отображения и ввода текста
Элемент управления Назначение
Текстовое поле (TextBox) Ввод и отображение текста. Текст может редактироваться (изменяться) пользователем.
Метка (Label) Отображение не редактируемого текста, например, для обозначения поля на форме или отображения инструкции пользователю
Метки
Элемент управления Label отображает текст, который пользователь не может изменять. Метки можно использовать для идентификации элементов управления, например, текстовых полей и полос прокрутки, не имеющих собственного свойства caption (Надпись). Текст, отображаемый в элементе Label (метка), задается свойством Caption этого элемента. Оно может быть установлено во время разработки в окне Properties или во время выполнения оператором присваивания в программном коде.
По умолчанию надпись - единственная видимая часть элемента управления Label. Однако, если значение свойства BorderStyle установлено равным 1 (это можно сделать во время разработки), то метка появляется вместе с границей, что придает ей вид, похожий на вид текстового поля. Изменить внешний вид метки можно установкой свойств BackColor (цвет фона), BackStyle (Стиль фона), ForeColor (цвет букв) и Font (Шрифт).
Подгонка размеров метки к ее содержимому
Однострочные надписи в метке можно задавать во время выполнения в окне Properties. Но что делать, если необходимо вывести более длинные надписи, или надпись будет меняться во время выполнения? Метки имеют два свойства, которые помогают подгонять их размер для отображения надписей переменной длины. Это свойства AutoSize (авторазмер) и Wordwrap (ПереносСлов).
Свойство AutoSize определяет, следует ли автоматически изменять размер элемента управления, чтобы он соответствовал выводимым данным. Если значение этого свойства равно True, то горизонтальный размер метки увеличивается, чтобы на ней поместилась надпись. Свойство wordwrap увеличивает высоту метки, при этом ее ширина не меняется.
Текстовые поля
Текстовые поля являются гибкими элементами управления и применяются как для получения вводимых пользователем данных, так и для отображения текста. Их не следует использовать для отображения текста, который пользователь не должен изменять, если только значение свойства Locked (Заблокирован) не установлено равным True.
Текст, отображаемый в текстовом поле, управляется свойством Text (Текст). Его можно установить тремя различными способами: во время разработки в окне Properties, во время выполнения из программного кода или во время выполнения на основании данных, введенных пользователем. Текущее содержимое текстового поля можно получить во время выполнения, считывая значение свойства Text.
Многострочные текстовые окна и перенос слов
По умолчанию в текстовом поле отображается одна строка текста, полосы прокрутки не отображаются. Если текст длиннее доступного пространства, будет видна только часть текста. Вид и поведение текстового поля можно изменить, установив значения свойств Multi-Line и scroliBars, которые доступны только во время разработки.
Примечание
Свойство ScrcllEars не следует путать с элементом управления Scroll Bar (Полоса прокрутки), который не присоединяется к текстовым полям и имеет свой собственный набор свойств.
Установка значения свойства MultiLine равным True позволяет текстовому полю принимать и отображать много строк текста во время выполнения. Так как в многострочном текстовом поле нет горизонтальной полосы прокрутки, то оно автоматически управляет переходом на новую строку, если текст не помещается. По умолчанию значение свойства ScroliBars равно None (Нет). Автоматический переход на новую строку избавляет пользователя от необходимости вводить в конце строк символ разрыва строки. Если строка текста длиннее строки текстового поля, то текстовое поле переносит вывод строки на следующую строку.
Символ разрыва строки нельзя вводить в окне Properties во время разработки. В процедуре разрыв строки моделируется вводом символа возврата каретки, за которым следует символ перевода строки (символы с кодами ANSI 13 и 10 соответственно). Можно также использовать константу vbCrLf для ввода комбинации символов возврат каретки/перевод строки. Например, следующая процедура обработки события вводит две строки текста в многострочное текстовое поле (Textl) при загрузке формы:
Sub Fom_Load (}
Textl.Text = "Here are two lines" & vbCrLf & "in a text box" End Sub
Работа с текстом в текстовом поле
Управлять точкой ввода и поведением выделенного фрагмента (selection behavior) в текстовом поле можно с помощью свойств selstart, SelLength и SelText. Эти свойства доступны только во время выполнения.
Когда текстовое окно впервые получает фокус, по умолчанию точка ввода (положение курсора) в текстовом поле находится слева от текста, находящегося в поле. Пользователь может его изменить с клавиатуры или с помощью мыши. Если текстовое окно теряет и затем снова приобретает фокус, точка ввода будет находиться там, где пользователь установил ее в последний раз.
В некоторых случаях, например, в приложениях обработки текстов пользователь предполагает, что новые символы должны появляться после существующего текста. В приложениях ввода данных пользователь предполагает, что новые данные замещают существующие. Свойства SelStart и selLength позволяют модифицировать поведение текстового поля, приспосабливая его к конкретным целям.
Значением свойства selStart является число, которое указывает место вставки в строке текста, причем 0 соответствует крайней левой позиции. Если значением свойства selStart является число, равное или больше, чем число символов в текстовом окне, точка ввода находится сразу за последним символом.
Число, равное значению свойства SelLength, задает ширину точки ввода. Если это число больше 0, то равное ему количество символов, начиная от текущей точки ввода, выбирается и выделяется.
Если пользователь начинает печатать при выделенном блоке текста, то последний будет замещен вводимым текстом. При необходимости можно заменить выделенный текст новым с помощью команды Paste (Вставить) меню Edit (Правка). Значением свойства SelText является строка текста, кото рую можно присвоить во время выполнения и которая заменит выделенный текст. Если такового нет, то в текущую точку ввода будет помещено значение свойства SelText.
Элементы управления, организующие выбор пользователя
В большинстве приложений пользователю предоставляется возможность выбора, начиная от простейшего "да/нет", до сложного выбора из списка, состоящего из сотен возможностей. VBA содержит несколько стандартных элементов управления для организации выбора.
Таблица. Элементы управления для организации выбора
Элемент управления Возможности
Check boxes (Флажки) Небольшой набор возможностей выбора, из которых пользователь может выбрать одну или более
Option buttons Небольшой набор возможностей, из которых пользователь может выбрать только одну
List box (Список) Прокручиваемый список возможностей выбора, из которого пользователь может выбрать только одну возможность
Combo box (Комбинированное окно) Прокручиваемый список возможностей выбора вместе с полем ввода. Пользователь может либо выбрать из списка, либо напечатать свой выбор в поле ввода
Флажки
Флажок показывает, включено или нет определенное условие. В приложении флажки используются, чтобы дать пользователю возможность выбора типа "правда/ложь" или "да/нет". Так как флажки работают независимо друг от друга, пользователь может установить любое их число одновременно.
Группирование возможностей с помощью переключателей
Переключатели предоставляют пользователю выбор из двух или более возможностей. В отличие от флажков, однако, они всегда работают как часть группы: выбор одного из них немедленно сбрасывает все другие переключатели группы. Объединение переключателей в группу означает для пользователя, что он может выбрать одну и только одну возможность из заданного набора.
Создание групп переключателей
Все переключатели, размещенные непосредственно на форме (т- е. не внутри рамки (frame) или графического окна (picture)), составляют одну группу. Если необходимо создать дополнительные группы переключателей, некоторые из них надо поместить внутрь рамок или графических окон.
Все переключатели внутри данной рамки составляют отдельную группу, то же само относится и к переключателям в графическом окне. При создании отдельной группы переключателей всегда сначала следует создать рамку или графическое окно, а затем поверх них- переключатели.
Пользователь может выбрать только один переключатель в группе внутри рамки.
Для группирования элементов управления с помощью рамки следует:
1. Выбрать элемент управления Frame (Рамка) на Панели элементов управления (Toolbox), нарисовать рамку и поместить ее на форму.
2. Выбрать переключатель на Панели элементов управления и нарисовать его внутри рамки.
3. Повторить шаг 2 для остальных переключателей, добавляемых в группу.
Соблюдение последовательности создания группы элементов управления (сначала рисуется рамка, а затем внутри нее рисуется каждый элемеш управления из группы) позволяет работать с ними как с группой. При перемещении рамки вместе с ней будут перемещаться и все элементы внутри нее. Если переместить существующий на форме элемент управления внутрь рамки, то он при перемещении рамки останется неподвижным, т. к. нарушена процедура создания группы.
Примечание
Чтобы сгруппировать существующие элементы управления, следует выбрать все элементы, которые будут составлять группу, вырезать их и вставить в рамку или графическое окно.
Контейнеры для элементов управления
Элементы управления являются независимыми объектами, однако между ними и формами существуют отношения подчиненности (parent and child relationships).
Для понимания идеи контейнеров необходимо четко осознавать, что все элементы управления являются подчиненными по отношению к форме, на которой они нарисованы. Фактически большинство элементов управления поддерживает свойство parent (Родитель) в режиме "только чтение" (readonly), т. е. значением этого свойства является форма, на которой расположен элемент управления, и это значение невозможно изменить. Положение элемента управления ограничено родительской формой, по отношению к которой он является подчиненным. Свойства Left и тор элемента управления связаны с родительской формой, и поэтому элемент управления нельзя переместить за границы этой формы. Перемещение контейнера также перемещает и элементы управления, и не изменяет значений свойств Left и тор элемента управления.
Выбор переключателей
Переключатель можно выбрать:
- Щелчком на нем кнопкой мыши во время выполнения
- Клавишей <ТаЬ> выбрать группу переключателей и затем клавишами со стрелками выбрать переключатель в группе
- Установив значение его свойства value равным True в программном коде: optChoice.Value = True
- С помощью клавиши быстрого доступа, определенной в надписи метки
Сделать переключатель в группе переключателем по умолчанию можно во время разработки. Для этого надо установить значение его свойства value равным True. Он остается выбранным, пока другой переключатель не будет выбран пользователем или программно.
Можно сделать переключатель недоступным, установив значение его свойства Enabled (Доступный) равным False. При выполнении программы такой переключатель выделен серым цветом, и это означает, что он не доступен пользователю.
Комбинированные окна и списки
Списки и комбинированные окна предоставляют пользователю список возможных вариантов выбора, по умолчанию отображаемых вертикально в одну колонку, хотя возможно отображение и в несколько колонок. Если число элементов превышает возможности отображения в комбинированном окне или списке, автоматически появляется полоса прокрутки. Пользователь в этом случае может просматривать список элементов, прокручивая его вверх и вниз или влево и вправо.
Комбинированное окно совмещает возможности списка и текстового поля. В этом элементе управления пользователь может производить выбор либо вводом текста в поле ввода комбинированного списка, либо выбором элемента из его списка.
По сравнению с другими элементами управления, которые содержат одно значение, например, значение свойства caption метки или значение свойства Text текстового поля, списки и комбинированные окна содержат набор значений. Для них существуют встроенные методы добавления, удаления и получения значений из этого набора во время выполнения. Программный код для добавления нескольких элементов в список с именем Listi мог бы выглядеть следующим образом:
Listl.Addltem "Paris" Listl.AddItem "New York" Listl.AddICem "San Francisco"
Списки и комбинированные окна - это эффективный способ представления большого числа вариантов выбора для пользователя в ограниченном пространстве на форме.
Полосы прокрутки как устройства ввода
В основном полосы прокрутки используются в текстовых полях или окнах, но иногда их применяют в качестве устройств ввода. Полосы прокрутки показывают текущую позицию на масштабной линейке, поэтому их можно использовать самостоятельно для управления вводом в программу, например, регулировать цветовую палитру в картинке или уровень громкости. Элементы управления HScrollBar (Горизонтальная полоса прокрутки) и VScrollBar (Вертикальная полоса прокрутки) функционируют независимо от других элементов управления и имеют собственные наборы событий, свойств и методов. Элементы управления "Полоса прокрутки" - это не то же самое, что встроенные полосы прокрутки, присоединяемые к текстовым полям, спискам, комбинированным окнам.
Руководящие принципы построения интерфейса Windows теперь предлагают применять полосы-регуляторы (slider controls) вместо полос прокрутки (scroll bars). Примеры регуляторов можно увидеть в панели управления Windows 95. Элемент управления "Регулятор" в стиле Windows 95 включен в версии VBA Professional и Enterprise.
Графические элементы управления. Отображение картинок и графики
В состав VBA включен объект для работу с графикой: image (Изображение).
Примечание
Объекты Form также имеют свойство Picture, которое можно установить для отображения картинки непосредственно в виде фона (заднего плана) формы.
Для отображения или замены картинки во время выполнения следует установить значение свойства picture при помощи функции LoadPicture. Ей передается только имя (с необязательным путем) файла картинки, и далее эта функция управляет деталями загрузки и отображения картинки:
picMain.Picture = LoadPicture("VAHGOSH.BMP")
Объект picture имеет свойство AutoSize, которое, если его значение равно True, автоматически изменяет размеры окна вывода картинки, чтобы оно соответствовало размерам выводимой картинки. Следует быть очень внимательным при разработке формы, если ее свойство AutoSize равно True. Размеры окна вывода картинки изменяются независимо от других элементов управления на форме. В результате картинка может, например, закрыть другие элементы управления. Во время разработки следует протестировать вывод каждой картинки, которую предполагается использовать в приложении.
Графическое окно в качестве контейнера
Графическое окно может также выполнять функции контейнера для других элементов управления. Как и в случае с рамкой (frame control) можно поместить другие элементы управления в графическое окно. Помещенные элементы управления будут перемещаться вместе с графическим окном, а их свойства тор и Left будут подчинены ему, а не форме,
Обыкновенно графическое окно в качестве контейнера используют для того, чтобы создать панель инструментов или строку состояния. Туда можно поместить элементы управления Image, чтобы они выступали в качестве кнопок, или добавить метки для отображения сообщений о состоянии. Устанавливая значение свойства Align (Выровнять) равным тор (Верх), Bottom (Низ), Left (Лево) или Right (Право) можно "прикрепить" графическое окно к соответствующему краю формы.
Элемент управления Image
Картинки загружаются в объект image: во время разработки - назначением имени файла и пути свойству picture, во Время выполнения - посредством функции LoadPicture.
При изменении размеров элементы управления Image и Picture ведут себя по-разному. Установка значения свойства Autosize объекта picture равным True приводит к тому, что размеры Графического окна изменяются в соответствии с размерами выводимой картинки; если значение этого свойства равно False, то картинка усекается (видна только ее часть). Объект Image не имеет свойства Autosize, а обладает свойством Stretch (Растягивание). Присвоение этому свойству значения False (значение по умолчанию) приводит к тому, что размеры элемента управления изменяются в соответствии с размерами картинки. Если свойство stretch равно True, то размеры картинки изменяются до размеров элемента управления Image, что может привести к искажению картинки при ее отображении.
Создание кнопок
Объект image распознает событие click, что предоставляет удобный способ создания кнопок с картинками вместо кнопок с надписями. Объединение нескольких элементов управления Image в горизонтальном направлении вверху экрана (обычно внут ри графического окна) в группу позволяет создавать панели инструментов приложения.
Примечание
В отличие от кнопок управления, элементы управления image не вдавливаются, если на них выполняется щелчок.
Другие элементы управления
В Панель элементов управления VBA включены несколько других стандартных элементов управления. Некоторые из них полезны для работы с большим объемом данных, содержащихся во внешних базах данных. Другие полезны для доступа к файловой системе Windows. Третьи элементы управления не подходят ни под одну из категорий, однако достаточно полезны при разработке приложений.
В приложениях VBA можно использовать элементы управления АсtiveX, называвшихся ранее элементами управления OLE, точно таким же образом, как используются и стандартные элементами управления. В версии VB Professional и Enterprise включены некоторые элементы управления ActiveX, а также возможность построения собственных элементов управления программиста. Дополнительные элементы управления ActiveX для любых вообразимых целей можно приобрести у многочисленных поставщиков этого продукта.
Остальные элементы управления
В VBA также включены некоторые другие полезные элементы управления, которые, однако, не относятся ни к одной из рассмотренных выше групп;
- Элемент управления Timer (Таймер) можно использовать для создания в приложении события через повторяющийся интервал времени. Это удобно для выполнения кода без взаимодействия с пользователем.
- Элемент управления OLE Container (Контейнер OLE) обеспечивает легкий способ добавления в приложение возможностей связывания (linking) и внедрения (embedding). Посредством этого элемента управления можно обеспечить доступ к выполняемым функциям любого приложения, поддерживающего OLE технологию, например Microsoft Excel, Word и многих других.
- Элемент управления Common dialog (Общий диалог) добавляет в приложение встроенные диалоговые оюна (built-in dialog boxes) для выбора файлов, цветов, шрифтов, функций печати.
Что такое фокус?
Объект, имеющий фокус, может получать вводимую пользователем с помощью мыши и клавиатуры информацию. В системе Microsoft Windows одновременно могут выполняться несколько приложений, но только у приложения, имеющего фокус, будет активный заголовок окна (active title bar) (выделен повышенной яркостью), и только оно может взаимодействовать с пользователем. На форме приложения VBA с несколькими полями ввода только поле ввода, имеющее фокус, будет отображать вводимый с клавиатуры текст.
Когда объект получает или теряет фокус, происходят соответственно события GotFocus и LostFocus. Формы и большинство элементов управления поддерживают эти события.
Объекту можно передать фокус несколькими способами:
- Выбрать объект с помощью мыши во время выполнения
- Выбрать объект с помощью клавиши доступа во время выполнения
- Из программного кода с помощью метода set Focus
Всегда можно определить, имеет ли объект фокус. Например, когда кнопка управления имеет фокус, обрамление ее надписи отображается с повышенной яркостью.
Объект может получить фокус, только если его свойства Enabled (Разрешено) и visible (Видимый) установлены в True. Свойство Enabled (Разрешено) позволяет объекту реагировать на инициированные пользователем события, например, ввод с клавиатуры и нажатие кнопок мыши. Свойство visible (Видимый) определяет, виден ли объект на экране-
Событие Validate элементов управления
Элементы управления имеют событие validate (Проверка достоверности), которое происходит перед тем, как элемент управления теряет фокус. Однако это событие возникает, только если свойство CausesValidation элемента управления перед получением фокуса имеет значение True. Событие Validate происходит перед потерей фокуса, поэтому во многих случаях оно более подходит для проверки достоверности данных (data validation), чем событие LostFocus.
Элементы управления, которые не могут получить фокус
Некоторые элементы управления не могут получать фокус. К ним относятся облегченные графические элементы управления:
- Frame (Рамка)
- Image (Изображение)
- Label (Метка)
Кроме этих элементов управления не могут получить фокус и неотображаемые элементы управления.
Установка последовательности перехода
Последовательность перехода (tab order) - это последовательность перехода от одного элемента управления к другому при нажатии клавиши ТаЬ. У каждой формы своя последовательность перехода. Обычно она соответствует последовательности создания элементов управления.
Пусть создаются два поля ввода, Textl и Text2, а затем - кнопка управления Commandl. При запуске приложения поле ввода Textl имеет фокус.
Нажатие клавиши Tab перемещает фокус между элементами управления в той последовательности, в которой они создавались.
Для изменения последовательности перехода необходимо установить свойство TabIndex элемента управления, которое определяет его позицию в последовательности перехода при нажатии клавиши Таb. По умолчанию значение свойства Tabindex элемента управления, созданного на форме первым, равно 0, элемента, созданного вторым - 1 и т. д. При изменении позиции элемента управления в последовательности переходов VBA автоматически перенумеровывает позиции других элементов управления, отражая вставку в другую позицию или удаление из последовательности перехода элемента управления. Например, если кнопка управления command1 в предыдущем примере становится первой в последовательности переходов, то значения свойства TabIndex других элементов управления автоматически перенумеровываются.
Наибольшее значение свойства Tabindex всегда на единицу меньше числа элементов в последовательности перехода, так как нумерация начинается с нуля. Даже если случайно значение свойства Tabindex окажется больше числа элементов управления, VBA переустановит это значение так, чтобы оно было на единицу меньше числа элементов управления.
Примечание
Элементы управления, которые не могут получить фокус, как и недоступные и невидимые элементы управления, не имеют свойства Tabindex и не могут быть включены в последовательность перехода. Когда пользователь нажимает клавишу <ТаЬ>, эти элементы управления пропускаются.
Удаление элемента управления из последовательности перехода
Обычно последовательное нажатие клавиши Таb во время выполнения выбирает каждый элемент управления из заданной последовательности перехода. Можно убрать элемент управления из последовательности перехода, установив значение его свойства TabStop равным False (или 0).
Элемент управления, свойство TabStop которого равно False, сохраняет свою позицию в последовательности перехода, хотя при переходе от одного элемента управления к другому по клавише Таb он пропускается.
Примечание
Группа переключателей имеет один табуляторный ограничитель (tab stop) Для выбранной кнопки, т.е. кнопки, значение свойства Value которой равно True, значение свойства TabStop автоматически равно True, тогда как значение этого свойства для других кнопок равно False.