Основы офисного программирования и язык VBA

         

CheckBox - флажок (кнопка выбора)


Флажок, или кнопка независимого выбора, позволяет пользователю указать, выбирает или не выбирает он опцию (обычно ее название является также названием флажка, т. е. значением свойства Caption). В зависимости от значения свойства TripleState у флажка может быть два или три состояния. По умолчанию значение этого свойства False, что соответствует двум значениям состояния флажка: True - флажок выбран, включен и False - флажок не выбран, выключен. Если для свойства TripleState установить True, у флажка появится также нейтральное состояние Null. Состояния флажка передаются в программу через свойство Value (Значение). Вот, например, возможные состояния флажка "С оптимизацией":


Рис. 13. 2.  Возможные состояния флажка

Верхний флажок находится в невыбранном состоянии (False), средний - в выбранном состоянии (значение True) и нижний - в нейтральном состоянии (значение Null). Кроме того, прямоугольная рамка вокруг названия нижнего флажка показывает, что он в фокусе (помечен).



ComboBox - комбинированный список


Комбинированный список - это элемент управления, соединяющий поле ввода с кнопкой и раскрывающимся списком. Работая с ним, пользователь может ввести значение непосредственно в поле ввода либо выбрать одно из значений в списке. Список состоит из строк данных. Данные в строке могут располагаться в одном или нескольких столбцах. Рассмотрим основные свойства объекта ComboBox.

ListCount определяет, сколько элементов находится в списке. Свойство доступно только для чтения и изменяется автоматически вместе с добавлением (удалением) элементов в список.ListRows задает число одновременно видимых строк списка.ListIndex задает номер выбранной строки; возможные значения от -1 до ListCount - 1, т. е. значение ListCount всегда на 1 больше максимального значения свойства ListIndex, так как нумерация строк начинается с 0. Если ни один элемент в списке не выбран, ListCount равно 0, а значением ListIndex будет -1.ColumnCount определяет число столбцов в выводимом на экран списке; если оно равно 0, столбцы не выводятся, при значении -1 выводятся все столбцы.ColumnWidths задает ширину каждого столбца для списков с несколькими столбцами. Значение этого свойства - строка, в которой размеры столбцов перечислены через точку с запятой. Пустое значение или -1 означают, что ширина столбца вычисляется автоматически, 0 - отсутствие столбца, значения > 0 задают ширину столбца в точках. Можно также рядом с числовым значением указывать другую единицу измерения. По умолчанию ширина столбца не меньше 1 дюйма (72 точек). Например, если значение ColumnCount (число столбцов) равно 4, а ширина всего окна списка 12 см, значение ColumnWidth вида "56; 112; 56; 112" устанавливает ширину первого и третьего столбцов - 56 точек (2 см), а второго и четвертого - 112 точек (4 см), то же разбиение можно получить, задав "2 cm; 4 cm; 2 cm; 4 cm". Если же задать "4 cm; 0;;8 cm", второго столбца на экране не будет, третий будет иметь минимальную вычисляемую ширину - 1 дюйм, а в четвертом будет видна лишь левая часть шириной около 5. 5 см (при этом появится горизонтальная полоса прокрутки).
Отсутствие значения ( пустая строка) означает, что все столбцы имеют одинаковую ширину.TextColumn задает номер столбца, видного пользователю. Нумерация столбцов начинается с 1. 0 означает, что будет виден только выбранный элемент из строки ListIndex. При значении 1 выводится первый столбец, чья ширина, установленная свойством ColumnWidths, больше 0.BoundColumn указывает столбец со значением данных (свойством Value) в списке со многими столбцами. Если свойство равно 0, значением свойства Value будет номер ListIndex выбранной пользователем на экране строки. Если BoundColumn > 0, значение свойства Value берется из указанного столбца. Таким образом, пользователь может выбрать на экране один элемент, а в качестве значения этого выбора в программе можно задать другой. Например, список может содержать названия месяцев в первом столбце и их номера - во втором. Установив TextColumn = 1, а BoundColumn = 2, мы получим элемент, в котором пользователь выбирает месяц по названию, а программа получает в качестве значения объекта номер выбранного месяца.Задать элементы списка можно программно, используя метод AddItem (например, в процедуре инициализации диалогового окна), либо установив при проектировании свойство RowSource. Его значение - строка, задающая диапазон ячеек Excel, из которых будут браться элементы списка. Например, следующие операторы задают список с 4 столбцами для элемента ComboBox1. Элементы этого списка берутся из ячеек b1:e6 текущего рабочего листа Excel:

ComboBox1. ColumnCount = 4 ComboBox1. RowSource = "b1:e6"

List - двухмерный массив с элементами списка. Обращение к нему:

объект. List (строка, столбец)

а элементы этого массива имеют тип Variant. Нумерация строк и столбцов начинается с 0. Это свойство можно использовать для инициализации списка с несколькими столбцами в элементах управления ComboBox и ListBox. Допустим, на уровне модуля определен двухмерный массив строк ListItems (4, 3) , содержащий 3 столбца значений, которые мы хотим предложить пользователю для выбора.


Тогда этот массив можно связать с комбинированным списком CBox в процедуре инициализации диалогового окна.

Private Sub UserForm_Initialize () СBox. ColumnCount = 3 ' задание числа столбцов списка CBox. List () = ListItems ' присвоение значения списку End Sub

ListStyle определяет внешний вид списка. Если оно равно fmListStylePlain = 0, элементы списка выводятся в обычном виде без кнопок слева. Если же его значение - fmListStyleOption = 1, слева от каждого элемента списка выводится кнопка. Для списков с единственным выбором это кнопка-переключатель (OptionButton), а для списков с множественным выбором - кнопка-флажок (CheckBox). При выборе элемента в соответствующей кнопке появляется метка.MatchRequired и MatchEntry определяют поведение комбинированного списка при вводе пользователем данных в поле ввода. Если MatchRequired равно True, вводимый пользователем текст может стать значением элемента, лишь когда он совпадает с одним из элементов списка. По умолчанию ему присвоено False, что не требует от вводимых пользователем данных совпадения с элементами списка. Свойству MatchEntry по умолчанию устанавливается 1, означающее, что при вводе пользователем очередного символа в списке ищется первый элемент, для которого введенное слово является префиксом и выводится в качестве значения. Если MatchEntry равно 0, поиск происходит по первой букве слова, т. е. при повторном выборе одной и той же буквы в качестве значений перебираются все элементы списка, начинающиеся на нее. При MatchEntry равном 2 список не реагирует на набираемый пользователем текст. Этот текст доступен через свойство Text.

События: AfterUpdate, BeforeDragOver, BeforeDropOrPaste, BeforeUpdate, Change, Click, DblClick, DropButtonClick, Enter, Error, Exit, KeyDown, KeyUp, KeyPress, MouseDown, MouseUp, MouseMove.

Методы: AddItem, Clear, Copy, Cut, DropDown, Move, Paste, RemoveItem, SetFocus, ZOrder.


CommandButton - командная кнопка


Командная кнопка запускает на выполнение действия системы, которые обычно задаются в процедуре обработки события Click (щелчок кнопки). Вот ее некоторые свойства.

Название кнопки - значение свойства Caption - можно установить при проектировании диалогового окна, а затем менять из программы.Булево свойство Cancel определяет, является ли данная кнопка кнопкой отказа. Если свойство равно True, то нажать эту кнопку можно, щелкнув по ней мышью, либо нажав клавишу <Esc>, либо нажав клавишу <Enter> в тот момент, когда она находится в фокусе. По умолчанию задается False. Это свойство может быть установлено только для одной кнопки в окне (это отслеживается системой автоматически). Типичные действия, которые должны выполняться при выборе кнопки отказа, состоят в восстановлении состояний и значений элементов управления и связанных с ними данных, измененных пользователем во время работы в диалоговом окне. Их следует описать в процедуре обработки события Click для данной кнопки.Булево свойство Default определяет, выбирается ли кнопка по умолчанию, если пользователь щелкает окно или нажимает клавишу Enter, когда фокус не находится на другой командной кнопке. По умолчанию свойству задается значение False.Булево свойство TakeFocusOnClick определяет, переместится ли фокус на данную кнопку после выбора ее щелчком. Иногда для этого свойства удобно установить False, чтобы, щелкнув кнопку, выполнить действие над содержимым элемента, находящегося в фокусе.



События: BeforeDragOver, BeforeDropOrPaste, BeforeUpdate, Change, Click, DblClick, Enter, Error, Exit, KeyDown, KeyUp, KeyPress, MouseDown, MouseUp, MouseMove.

Методы: Move, SetFocus, Zorder.



Другие свойства


Свойство TabIndex определяет порядковый номер элемента управления в обходе всех элементов с помощью клавиши Tab. Нумерация элементов начинается с 0.

Свойство ControlSource связывает данные основного документа приложения с состоянием элемента управления (значением свойства Value). Значение этого свойства - строка, задающая ячейку рабочего листа, связанную с данным элементом. Например, чтобы задать в качестве значения этого свойства для флажка CheckBox1 ячейку С5, используется присвоение вида:

CheckBox1. ControlSource = "C5"

При этом изменения состояния элемента управления будут автоматически заноситься в эту ячейку, и наоборот, изменения в данных будут отражаться на состоянии элемента управления. Если текущее значение свойства Value для элемента равно Null, ячейка, связанная с ним не содержит никакого значения (пустая). По умолчанию значение ControlSource - пустая строка.

Свойство Tag задает текстовый комментарий к объекту. Оно никак не связано с его другими свойствами и может быть использовано для хранения вспомогательной информации об элементе управления. Иногда свойство Tag служит альтернативой свойству Name для идентификации элемента в программе.

Свойство Font определяет шрифт, используемый в изображении данного объекта. Его значение - объект класса Font, идентифицируемый по имени (свойству Name). По умолчанию шрифт элемента управления тот, что установлен для его контейнера.



Frame - рамка (группы)


Элемент управления Frame служит для явно видимого объединения в группу нескольких других элементов управления. Кнопки-переключатели (OptionButton), помещенные в рамку, автоматически являются взаимоисключающими, т. е. при выборе одной из них остальные сразу же отключаются (получают значение False). Поведение других элементов, помещенных в рамку, не меняется.

Заголовок на верхней границе рамки задается свойством Caption. Как и для диалогового окна, для рамки можно задать рисунок, являющийся фоном (свойство Picture), определить область прокрутки и вид полосы прокрутки (свойства ScrollLeft, ScrollTop, ScrollHeight, ScrollWidth, ScrollBars). Свойство Zoom определяет коэффициент уменьшения или увеличения изображений всех элементов внутри рамки (измеряется в процентах и принимает значения от 10% до 400%).

События: AddControl, BeforeDragOver, BeforeDropOrPaste, Click, DblClick, Enter, Error, Exit, KeyDown, KeyUp, KeyPress, Layout, MouseDown, MouseUp, MouseMove, RemoveControl, Scroll, Zoom.

Методы: Copy, Cut, Move, Paste, RedoAction, Repaint, Scroll, SetDefaultTabOrder, UndoAction, ZOrder.



Image - изображение


Элемент Image - это прямоугольное графическое изображение в диалоговом окне. Его используют как для улучшения внешнего вида окна, так и для показа пользователю информации, представляемой в виде фотографий, рисунков, графиков, диаграмм. Рисунок в элементе Image можно масштабировать, изменять выводимую часть (если рисунок больше изображения на экране), можно динамически изменять размеры изображения, но рисунок нельзя редактировать в диалоговом окне.

Какой именно рисунок или графический образ показывается на экране, определяет свойство Picture. Его значением может быть изображение в одном из графических форматов:. bmp,. cur,.gif,. ico,. jpg и. wmf. Задать значение этого свойства можно при проектировании окна из списка свойств элемента Image. Для этого, щелкнув кнопку (…) в строке со свойством Picture, вызовите программу поиска и загрузки графических файлов, найдите файл с нужным изображением и выберите кнопку Open. Чтобы вывести или изменить изображение программно, используется функция LoadPicture. Например, следующий оператор выводит изображение автомобиля в элемент Image1:

Image1. Picture = LoadPicture ("c:\windows\car. bmp")

Свойство PictureSizeMode определяет масштабирование рисунка. Если его значение fmPictureSizeModeClip = 0, части рисунка, выходящие за рамку изображения, обрезаются, а при fmPictureSizeModeStretch = 1 рисунок масштабируется так, чтобы занимать всю площадь изображения. При этом может произойти искажение (относительное растяжение или сжатие) по горизонтали или вертикали. При значении fmPictureSizeModeZoom = 3 рисунок масштабируется с сохранением своих относительных размеров так, что, либо его высота, либо его ширина совпадают с высотой или шириной изображения на экране. Ниже показано влияние свойства PictureSizeMode на изображение.


увеличить изображение
Рис. 13.3.  Варианты масштабирования изображений

Расположение рисунка внутри рамки изображения задается свойством PictureAlignment. Возможные значения этого свойства перечислены в таблице.


Имя константыЗначениеРисунок расположен
fmPictureAligmentTopLeft 0в верхнем левом углу
fmPictureAlignmentTopRight 1в верхнем правом углу
fmPictureAlignmentCenter 2по центру
fmPictureAlignmentBottomLeft 3в нижнем левом углу
fmPictureAlignmentBottomRight 4в нижнем правом углу


Если значение свойства PictureSizeMode равно fmSizeModeStretch, рисунок занимает всю площадь изображения независимо от значения PictureAlignment. В частности, на рисунке 13. 3 свойство PictureAlignment для всех трех изображений имеет значение 0 (fmPictureAligmentTopLeft).

Если размер вставляемого рисунка меньше размера элемента, в который его помещают, всю поверхность изображения можно покрыть копиями рисунка. Для этого булеву свойству PictureTiling надо присвоить True (по умолчанию у него значение False).

Каким образом располагаются копии рисунка на изображении, зависит от значений свойств PictureAlignment и PictureSizeMode. Например, если первое равно fmPictureAligmentTopLeft, первая копия рисунка разместится в левом верхнем углу, при fmPictureAlignmentCenter первая копия рисунка располагается в центре изображения, а от нее во все стороны распространяются остальные. Если свойство PictureSizeMode равно fmSizeModeStretch, все изображение занято одной копией рисунка, при fmPictureSizeModeZoom может появиться несколько копий, обрезанных по краям изображения. Ниже показано влияние этих параметров на покрытие изображения копиями рисунка автомобиля:


увеличить изображение
Рис. 13. 4.  Влияние параметров PictureAlignment и PictureSizeMode

События: BeforeDragOver, BeforeDropOrPaste, Click, DblClick, Error, MouseDown, MouseUp, MouseMove.

Методы: Move, Zorder.


Имя объекта


Свойство Name задает имя объекта (диалогового окна, элемента управления или шрифта). Это внутреннее имя, идентифицирующее объект в программе. Поэтому в одном проекте не должно быть двух диалоговых окон с одним именем, а в одном окне - двух одноименных разных элементов управления.

Имя, получаемое объектом, созданным на этапе проектирования, нельзя изменить во время исполнения программы. Для динамически создаваемых объектов можно назначать имена, используя присвоение:

класс_объекта. Name = Имя

где класс_объекта - название класса объектов, а Имя - строка, задающая имя конкретного объекта из указанного класса.

При создании объектов на этапе проектирования система назначает им по умолчанию имена вида:

класс_объектаN

где N - порядковый номер очередного объекта в классе. Для диалоговых окон это имена UserForm1, UserForm2…, для командных кнопок - CommandButton1, CommandButton2 и т. д. В списке свойств Свойства (Properties) назначенное системой имя можно изменить на произвольную строку, удовлетворяющую условиям на имена в данном приложении. При этом надо одновременно изменить имя данного объекта во всех тех ранее созданных процедурах, где оно было использовано (в частности, в процедурах обработки событий данного элемента управления или диалогового окна).



Коллекция Controls


Для доступа к набору элементов управления диалогового окна можно использовать коллекцию Controls, включающую все элементы управления окна. Каждый элемент управления имеет в этой коллекции индекс, значение которого может быть числом или строкой. Для первого элемента управления индекс равен 0. Числовые индексы определяются порядком размещения элементов в коллекции. Строковое значение индекса соответствует имени (Name) элемента.

Например, следующий цикл позволяет скрыть элементы управления диалогового окна MyForm, которые в данный момент не нужны пользователю.

Public Sub WorkWithForm2 () Dim myForm As New frmMy2 Dim Ctrl As Control Dim msgCode As Integer, Answer As Integer For Each Ctrl In myForm. Controls 'цикл по всем элементам управления msgCode = vbYesNo + vbQuestion 'Вопрос об очередном элементе управления: Answer = MsgBox (prompt:="Скрыть элемент " & Ctrl. Name, _ Buttons:=msgCode, Title:="Вопрос") If Answer = vbYes Then 'ответ "Да" Ctrl. Visible = False 'скрыть очередной элемент End If Next Ctrl myForm. Show End Sub



Label - метка (надпись, статический текст)


Один из самых простых элементов управления Label (метка) служит для вывода разного рода надписей в диалоговом окне. Часто эти надписи именуют или объясняют другие элементы окна. При работе программы текст метки может меняться. Основное свойство метки - Caption - содержит в качестве значения текст метки.

События: BeforeDragOver, BeforeDropOrPaste, Click, DblClick, Error, MouseDown, MouseUp, MouseMove.

Методы: Move, Zorder.



ListBox - список


Элемент управления ListBox выводит на экран окно со списком значений, позволяя пользователю выбрать из них одно или более. В варианте с выбором одного элемента ListBox ведет себя, как и описанный выше список в элементе ComboBox. Значение передается в свойстве Value, такую же роль играют свойства ColumnCount, ColumnWidth, ControlSource, RowSource, BoundColumn, List-Index, TextColumn и др. Главное отличие - способность обеспечить множественный выбор. Режим выбора определяется свойством MultiSelect, по умолчанию его значение fmMultiSelectSingle = 0, что соответствует выбору одного значения в списке. Значение fmMultiSelectMulti = 1 задает режим множественного выбора, при котором выбор и отмена выбора элемента осуществляются щелчком мышью или нажатием клавиши "пробел". Значение fmMulti-SelectExtended = 2 задает режим, при котором выбор осуществляется щелчком или нажатием клавиши Shift, а расширить область выделенных элементов можно, используя клавиши-стрелки при нажатой клавише Shift.

В случае множественного выбора значение свойства Value всегда - Null, а получение информации о выбранных пользователем элементах обеспечивает булево свойство Selected (выбран), которое по номеру элемента списка определяет, выбран он (True) или нет (False). Обращение к нему имеет вид:

объект. Selected (индекс),

где индекс - целое в интервале от 0 до ListCount - 1. Например, если в списке ListBox1 пять элементов, то следующий цикл перенесет выбранные пользователем элементы в столбец "A" рабочего листа "Лист1" в Excel.

For i = 0 To 4 If ListBox1. Selected (i) = True Then Worksheets ("Лист1"). Cells (i+1, 1) = ListBox1. List (i) End If Next I

Свойство Selected используется также для выбора или отмены выбора элементов из программы.

События: AfterUpdate, BeforeDragOver, BeforeDropOrPaste, BeforeUpdate, Change, Click, DblClick, DropButtonClick, Enter, Error, Exit, KeyDown, KeyUp, KeyPress, MouseDown, MouseUp, MouseMove.

Методы: AddItem, Clear, Move, RemoveItem, SetFocus, ZOrder.



Метод Add (Добавить)


Позволяет добавить элемент управления во время исполнения программы. С его помощью можно добавить страницу в набор страниц, вкладку в полосу вкладок или любой элемент управления на страницу или диалоговое окно.

Вызов метода Add для вставки страницы или вкладки имеет вид:

Set Object = объект. Add ([Name [, Caption [, index]]])

Для добавления элемента управления к диалоговому окну или странице используется присвоение:

Set Control = объект. Add (ProgID [, Name [, Visible]])

Здесь объект - имя объекта (коллекции), к которому добавляется элемент, Name - задает имя (свойство Name) добавляемого объекта (если его нет, система присвоит добавленному элементу стандартное имя), Caption - задает заголовок страницы или вкладки, появляющийся на закладке, index - указывает положение страницы или вкладки в коллекциях Pages или Tabs, соответственно. ProgID - программный идентификатор добавляемого элемента, который представляет собой строку символов (без пробелов), идентифицирующую класс объектов. У этой строки структура обычно такова: <Поставщик>. <Компонента>. <Версия>. Программный идентификатор ProgID отображается на идентификатор класса (CLSID), т. е. на уникальный идентификатор (UUID), регистрируемый в системном реестре Windows. Необязательный булев параметр Visible указывает, виден ли объект на экране. По умолчанию он равен True (объект виден).

Вот значения программного идентификатора ProgID для стандартных элементов управления:

флажок Forms. CheckBox. 1
комбинированный список Forms. ComboBox. 1
командная кнопка Forms. CommandButton. 1
рамка Forms. Frame. 1
изображение Forms. Image. 1
метка Forms. Label. 1
список Forms. ListBox. 1
набор страниц Forms. MultiPage. 1
переключатель Forms. OptionButton. 1
полоса прокрутки Forms. ScrollBar. 1
счетчик Forms. SpinButton. 1
полоса вкладок Forms. TabStrip. 1
поле ввода Forms. TextBox. 1
выключатель Forms. ToggleButton. 1

Метод Add возвращает объект Page при вставке страницы в набор страниц и объект Tab при вставке вкладки в полосу вкладок.
В остальных случаях он возвращает объект из класса, определяемого значением ProgID. После добавления элемента управления возбуждается событие AddControl.

Давайте добавим элемент управления к окну во время работы программы. Допустим, диалоговое окно InsertElem содержит командную кнопку cmbNewCtrl "Добавить элемент" и группу из двух переключателей: Opb1 "поле ввода" и Opb2 "список":


Рис. 13. 8.  Окно перед добавлением элемента

При выборе кнопки в окно будет вставляться в зависимости от того, какой из переключателей включен, либо два поля ввода с именами Text1 и Text2, первое из которых содержит приглашение "Введите имя", либо новый список NewList со списком имен.

Пример 13.1.

(html, txt)

Вот результаты выбора командной кнопки при разных значениях переключателей:


увеличить изображение
Рис. 13. 9.  Результаты вставки элементов


Метод AddItem (Добавить элемент)


Этот метод позволяет добавлять элементы в списки и комбинированные списки. В списки с несколькими столбцами метод AddItem добавляет строку элементов. Его вызов имеет вид:

Перем = объект. AddItem ([Item [, varindex]])

или

объект. AddItem [Item [, varindex]]

Здесь Перем - переменная типа Variant, объект - объект-список, в который добавляется элемент, Item - добавляемый элемент, varindex - номер добавляемого элемента или строки. Первый элемент (строка) в списке имеет номер 0. Значение varindex не должно превышать числа элементов списка ListCount. Если этот параметр не задан, элемент вставляется в конец списка. Поскольку в первом случае Перем в результате вызова получает пустое значение Empty, чаще используется второй вариант вызова.

Если в списке несколько столбцов, вставляемая непустая строка содержит непустое значение элемента для первого столбца и пустые значения для остальных. Чтобы установить непустые элементы во втором и остальных столбцах, можно использовать свойство List. Например, если в примере с добавлением списка NewList требуется, чтобы этот список содержал два столбца: "имя" и "фамилия", то блок операторов для его создания может выглядеть так:

Else ' добавляем список AddElem. Width = 350 'Расширяем форму Set NewCtrl = Controls. Add ("Forms. ListBox. 1", "NewList") NewCtrl. ColumnCount = 2 'число столбцов списка NewCtrl. Left = 96 NewCtrl. Top = 12 NewCtrl. Width = 200 NewCtrl. Height = 70 NewCtrl. AddItem ("Анна") '1-ая строка, 1-ый столбец NewCtrl. List (0, 1) = "Павлова" '1-ая строка, 2-ой столбец NewCtrl. AddItem ("Елена") '2-ая строка, 1-ый столбец NewCtrl. List (1, 1) = "Образцова" '2-ая строка, 2-ой столбец NewCtrl. AddItem ("Ирина") '3-я строка, 1-ый столбец NewCtrl. List (2, 1) = "Архипова" '3-я строка, 2-ой столбец NewCtrl. AddItem ("Мария") '4-ая строка, 1-ый столбец NewCtrl. List (3, 1) = "Каллас" '4-ая строка, 2-ой столбец

Теперь диалоговое окно после добавления списка будет выглядеть так:


Рис. 13. 10.  Список с двумя столбцами

Для элементов, у которых установлен источник списка (свойство RowSource), метод AddItem неприменим.



Метод Clear (Очистить)


Этот метод удаляет все объекты, входящие в некоторый объект или коллекцию объектов. Из списка и комбинированного списка Clear удаляет все элементы списков, т. е. делает их пустыми. Из элементов набор страниц и полоса вкладок им удаляются все страницы и вкладки. Из коллекции элементов управления Controls метод Clear удаляет элементы, созданные при исполнении программы методом Add. Попытка удалить элементы, созданные на этапе проектирования приводит к ошибке. Нельзя также "чистить" элементы, данные которых связаны с основным объектом приложения, например, списки с установленным свойством RowSource. Вызов метода имеет вид:

объект. Clear

где объект - очищаемый объект или коллекция объектов.



Метод Copy (Копировать)


Этот метод выполняет копирование содержимого объекта в буфер обмена. Что именно копируется, зависит от объекта. Для поля ввода и комбинированного списка копируется выделенный в текущий момент текст. Для диалогового окна, страницы и рамки копируются активные (выбранные) в данный момент элементы. Вызов метода имеет вид:

объект. Copy

где объект - объект, для которого вызывается метод.

Копирование объекта не изменяет его.



Метод Cut (Вырезать)


В результате вызова этого метода информация, выделенная в объекте, удаляется из него и помещается в буфер обмена. Для поля ввода и комбинированного списка удаляется и копируется в буфер текст, выделенный в текущий момент. Для диалогового окна, страницы и рамки удаляются активные (выбранные) в данный момент элементы. Удаляться могут лишь те элементы, что созданы в процессе работы программы. Вызов метода имеет вид:

объект. Cut

где объект - объект, для которого вызывается метод.

Пример применения метода Cut приведен ниже при описании метода Paste.



Метод DropDown (Вывести список)


Раскрывает список элементов, входящих в комбинированный список. Вызов этого метода имеет вид:

объект. DropDown

где объект - тот комбинированный список, для которого вызывается метод.

Метод DropDown можно использовать, чтобы показать список элементов из комбинированного списка в ответ на событие, возникшее в другом управляющем элементе. Мы включили в наше диалоговое окно еще одну возможность, ѕ добавлять комбинированный список. Вот новый фрагмент кода:

Else 'добавляем комбинированный список AddElem. Width = 350 'Расширяем форму Set NewCtrl = Controls. Add ("Forms. ComboBox. 1", "List2") Controls ("List2"). ColumnCount = 2 'число столбцов списка Controls ("List2"). Left = 96 Controls ("List2"). Top = 12 Controls ("List2"). Width = 200

Controls ("List2"). AddItem ("Федор") Controls ("List2"). List (0, 1) = "Шаляпин" Controls ("List2"). AddItem ("Сергей") Controls ("List2"). List (1, 1) = "Лемешев" Controls ("List2"). AddItem ("Лучано") Controls ("List2"). List (2, 1) = "Паваротти" Controls ("List2"). AddItem ("Пласидо") Controls ("List2"). List (3, 1) = "Доминго"

Controls ("List2"). DropDown

Теперь диалоговое окно при добавлении комбинированного списка выглядит так:


Рис. 13. 11.  Показ элементов комбинированного списка



Метод Move (Сдвинуть)


Результат вызова этого метода - сдвиг диалогового окна, одного элемента управления или одновременный сдвиг всех элементов управления коллекции Controls диалогового окна.

Для диалогового окна или отдельного элемента вызов метода имеет вид:

объект. Move ([Left [, Top [, Width [, Height [, Layout]]]]])

а для коллекции Controls:

объект. Move (X, Y)

Здесь объект - имя сдвигаемого объекта или коллекции, объекты которой сдвигаются. Все параметры в скобках в первом варианте вызова необязательны. Параметры Left и Top задают координаты верхнего левого угла объекта в точках, а Width и Height - ширину и высоту объекта в точках (все четыре имеют тип Single). Булев параметр Layout определяет, будет ли для объекта-родителя инициировано событие Layout. Во втором варианте параметры X и Y обязательны, они задают смещение всех объектов коллекции по горизонтали и вертикали (отрицательные значения - сдвиг влево и вверх, положительные - вправо и вниз).

Метод Move можно использовать как для сдвига объекта, так и для изменения его размеров. Например, чтобы при двойном щелчке изображения Image1, имеющего координату верхней границы 18 и высоту 70, поднять его верхнюю границу и увеличить высоту на 10 точек, можно использовать процедуру.

Private Sub Image1_DblClick (ByVal Cancel As MSForms. ReturnBoolean) Me. Image1. Move Top:=8, Height:=80 End Sub



Метод Paste (Вставить)


Вставляет содержимое буфера обмена в объект. Вызов метода имеет вид:

объект. Paste

где объект - тот объект, в который происходит вставка. Если этот объект - поле ввода или комбинированный список, содержимое буфера обмена трактуется как текст. В диалоговое окно, форму или страницу может вставляться любой объект, попавший в буфер обмена.



Метод RedoAction (Повторить действие)


Применяется к диалоговому окну, рамке и странице для того, чтобы восстановить результат последнего действия, отмененного посредством Undo. Вызов метода имеет вид:

BooleanVar = объект. RedoAction

где объект - это объект, для которого требуется повторить последнее отмененное действие. При успешном вызове метод присвоит булевой переменной BooleanVar значение True, а при невозможности выполниться - False.

Возможность применения метода RedoAction зависит от значения свойства CanRedo объекта, вызывающего метод. Если CanRedo равно False, метод неприменим. Пример использования метода RedoAction приведен ниже в описании метода Undo.



Метод Remove (Удалить)


Позволяет удалить элемент коллекций Controls, Pages и Tabs или элемент управления из диалогового окна, страницы или формы. Удаляться могут лишь объекты, добавленные динамически в процессе работы программы. Попытка удалить объект, созданный на этапе проектирования диалогового окна, приведет к ошибке. Вызов метода имеет вид:

объект. Remove (collectionindex)

где объект - идентифицирует объект (коллекцию), к которому применяется метод, а обязательный параметр collectionindexзадает номер или индекс удаляемого элемента коллекции (он может быть числом или строкой-именем элемента).



Метод RemoveItem (Удалить элемент)


С помощью этого метода можно удалять элементы из списков и комбинированных списков. В списках с несколькими столбцами метод RemoveItem удаляет всю строку элементов. Его вызов имеет вид:

BooleanVar = объект. RemoveItem (index)

где объект - идентифицирует объект (список) из которого удаляется элемент, а index - указывает номер удаляемой строки (первая строка в списке имеет номер 0). В переменной BooleanVar после выполнения удаления возвращается False. Поэтому чаще при вызове используется только правая часть присвоения. Например, для удаления из списка ListBox1 выбранного в данный момент элемента можно использовать вызов:

ListBox1. RemoveItem (ListBox1. ListIndex)

Метод RemoveItem не удаляет строки из списков, данные в которых связанны с объектом приложения (т. е. из списков с установленным свойством RowSource).



Метод Repaint (Перерисовать)


Этот метод предназначен для восстановления модифицированных изображений диалоговых окон, рамок и страниц. Поскольку система сама перерисовывает изменные элементы управления, использовать метод Repaint следует лишь тогда, когда пользователь немедленно должен увидеть результаты модификации, не дожидаясь, пока это сделает система. Вызов метода имеет вид:

Boolean = объект. Repaint

где объект - идентифицирует восстанавливаемый объект.



Метод Scroll (Прокрутить)


Сдвигает полосу прокрутки в диалоговом окне, рамке или на странице (но не применяется к отдельному элементу вида полоса прокрутки и к полосе прокрутки в поле ввода). Вызов метода имеет вид:

объект. Scroll ([ActionX [, ActionY]])

где объект - объект, в котором происходит прокрутка, параметр ActionX задает действие в горизонтальном направлении, а ActionY - в вертикальном. Ниже перечислены возможные значения этих параметров и разъяснен их смысл.

fmScrollActionNoChange = 0 не сдвигать в данном направлении; fmScrollActionLineUp = 1 выполнить небольшой сдвиг вверх на вертикальной полосе или небольшой сдвиг влево на горизонтальной полосе; движение эквивалентно нажатию клавиш-стрелок "вверх" и "влево"; fmScrollActionLineDown = 2 выполнить небольшой сдвиг вниз на вертикальной полосе или небольшой сдвиг вправо на горизонтальной полосе; движение эквивалентно нажатию клавиш-стрелок "вниз" и "вправо" fmScrollActionPageUp = 3 сдвинуться на одну страницу вверх на вертикальной полосе прокрутки или на одну страницу влево на горизонтальной полосе прокрутки; движение эквивалентно нажатию клавиши PgUp для передвижения полосы прокрутки; fmScrollActionPageDown = 4 сдвинуться на одну страницу вниз на вертикальной полосе прокрутки или на одну страницу вправо на горизонтальной полосе прокрутки; движение эквивалентно нажатию клавиши PgDn для передвижения полосы прокрутки; fmScrollActionBegin = 5 сдвинуться на верхний край вертикальной полосы прокрутки или на левый край горизонтальной полосы прокрутки; fmScrollActionEnd = 6 сдвинуться на нижний край вертикальной полосы прокрутки или на правый край горизонтальной полосы прокрутки.



Метод SetDefaultTabOrder (Установить стандартный порядок обхода)


Устанавливает для диалогового окна, рамки или страницы стандартный порядок обхода их элементов управления при нажатии клавиши Tab. Этот порядок соответствует обходу элементов слева направо и сверху вниз и совпадает с лексикографическим порядком на координатах левых верхних углов элементов <Left, Top>. Вызов метода имеет вид:

объект. SetDefaultTabOrder

где объект - объект, для которого устанавливается стандартный порядок.



Метод SetFocus (Установить фокус)


Устанавливает фокус на вызвавший этот метод элемент управления. При невозможности это сделать фокус остается на прежнем месте, и возбуждается ошибка. Вызов метода имеет вид:

объект. SetFocus

где объект - объект, который стремится попасть в фокус.

По умолчанию элемент управления, попавший в фокус в результате вызова метода SetFocus, автоматически не активизируется и не появляется поверх других закрывающих его объектов. Причина использования метода SetFocus в том, что доступ к некоторым свойствам элементов управления возможен лишь для объектов, находящихся в фокусе (например, для поля ввода это свойство LineCount, для списка - ListCount).



Метод UndoAction (Отменить действие)


Отменяет последнее действие, выполненное в диалоговом окне, рамке или на странице. Подтверждающий возможность отмены действия признак - значение True свойства CanUndo. Если оно равно False, последнее действие, совершенное в диалоговом окне, отменить нельзя.

Вызов метода имеет вид:

Boolean = объект. UndoAction

где объект - объект, для которго отменяется последнее действие.

Типичные действия, которые можно отменять методом UndoAction и восстанавливать методом RedoAction, - ввод и выделение текста в поле ввода, выделение элемента в списке, установка значений флажков, переключателей и выключателей и т. п. А вот добавление элемента в список отмене не подлежит.



Метод ZOrder (Z-упорядочить)


Помещает объект впереди или сзади всех других перекрывающихся с ним объектов на экране.

Вызов метода имеет вид:

объект. ZOrder ([zPosition])

где объект - объект, меняющий свое положение, zPosition - необязательный параметр, указывающий, впереди или сзади поместить объект. При значении zPosition, равном fmTop = 0, объект помещается впереди (это значение по умолчанию), а при значении fmBottom = 1 - сзади других перекрывающих его объектов.

Вообще при проектировании интерфейса следует избегать перекрытия одних элементов управления другими на поверхности окна, так как это затрудняет понимание и использование интерфейса. Кроме того, среди элементов управления есть набор страниц, позволяющий помещать на одном и том же месте окна различные элементы управления, но благодаря заголовкам страниц, делающий переход от набора элементов одной страницы к набору элементов другой простым и удобным.



MultiPage - набор страниц


Элемент управления MultiPage объединяет несколько независимых диалоговых окон - страниц (вкладок). Заголовки страниц обычно видны на одной из сторон элемента на их закладках, а переход на страницу происходит после щелчка по ее закладке. Этот простой переход с одной страницы на другую и делает MultiPage удобным средством для представления разнородных данных, относящихся к одному объекту. Такие данные в "бумажных" офисах хранятся обычно в отдельных папках и образуют дела, досье и т. п.

Каждая страница из MultiPage - это объект типа Page, а все они включены в коллекцию Pages (страницы). При создании элемента MultiPage в него автоматически помещаются две страницы с именами Page1 и Page2. Имена можно изменять, можно добавлять и новые страницы. Чтобы на стадии проектирования добавить новую страницу, переименовать, передвинуть или удалить имеющуюся, щелкните правой кнопкой мыши полосу закладок и выберите нужное действие в появившемся контекстном меню. Рассмотрим основные свойства набора страниц.

Количество страниц возвращается свойством Count.Свойство Value для элемента MultiPage определяет номер текущей активной страницы в коллекции Pages.Свойство SelectedItem (его можно только читать) возвращает текущую активную страницу (как объект). Его можно использовать для считывания и установки свойств этой страницы и входящих в нее элементов управления.Свойство Style определяет, в каком виде представляются заголовки страниц. По умолчанию оно равно fmTabStyleTabs=0 и задает представление заголовков в виде закладок в полосе заголовков. Каждая закладка с заголовком находится внутри границ своей страницы. Если значение fmTabStyleButtons = 1, заголовок каждой страницы находится на отдельной кнопке, расположенной в полосе заголовков. Переход на страницу происходит после выбора кнопки с ее заголовком. Если же значение fmTabStyleNone = 2, полоса с заголовками страниц на экран не выводится.Свойство TabOrientation задает расположение полосы с заголовками страниц. Его значения описаны в следующей таблице.


КонстантаЗначениеЗаголовки расположены
fmTabOrientationTop 0наверху
fmTabOrientationBottom 1внизу
fmTabOrientationLeft 2на левой стороне
fmTabOrientationRight 3на правой стороне


Булево свойство MultiRow позволяет включить возможность создания нескольких полос с закладками (по умолчанию его значение равно False, что соответствует одной полосе закладок).Свойства TabFixedHeight и TabFixedWidth устанавливают или возвращают высоту и ширину закладки (в точках). При значении 0 ширина закладок устанавливается автоматически так, чтобы в каждой закладке помещалось ее название и оно занимало всю ширину элемента. При значениях > 0 у всех закладок одинаковые размеры, заданные свойством TabFixedWidth. Минимально возможный размер закладки - 4 точки.

Рассмотрим пример, демонстрирующий разные способы доступа к страницам набора. Допустим, в наборе страниц MyPages есть страницы: Page1, Page2, Page3 и Page4, созданные и размещенные в указанном порядке.

Private Sub UserForm_Initialize () 'Использование индекса (числового или строкового) и коллекции Pages MyPages. Pages (0). Caption = " Страница 1 " MyPages. Pages. Item (1). Caption = " Страница 2 " 'Использование объекта Page без ссылки на коллекцию Pages: MyPages. Page3. Caption= " Страница 3 " 'Использование свойства SelectedItem: MyPages. Value = 3 MyPages. SelectedItem. Caption = " Страница 4 " End Sub

События: AddControl, BeforeDragOver, BeforeDropOrPaste, Change, Click, DblClick, Enter, Error, Exit, KeyDown, KeyUp, KeyPress, Layout, MouseDown, MouseUp, MouseMove, RemoveControl, Scroll, Zoom.

Методы: Move, SetFocus, ZOrder.


Объект DataObject


Этот объект не элемент управления, но участвует в операциях перетаскивания выделенных текстов из одного элемента управления в другой. В нем одновременно могут храниться несколько текстовых данных в разных форматах. Когда в DataObject помещается новый текст с имеющимся там форматом, то прежний текст с этим форматом заменяется на новый.

Поведение DataObject похоже на поведение буфера обмена. Однако DataObject существует только в момент работы приложения и исчезает после ее завершения, а данные в буфере обмена при этом не теряются, DataObject может хранить только текстовые данные, а буфер обмена - и графические. С другой стороны, DataObject - настоящий OLE-объект и поддерживает в отличие от буфера обмена операции перетаскивания текста.

Текст заносится в DataObject методом SetText, а извлекается оттуда методом GetText:

объект. SetText (StoreData [, format])

и

Строка = объект. GetText ([format]),

где объект - объект-владелец метода, StoreData - текст, который надо запомнить в объекте, format - это необязательный параметр, задающий "формат" данных (1 соответствует стандартному текстовому формату, а другие числа и строки соответствуют пользовательским форматам). Если параметр format в вызове SetText явно не указан, то запоминаемому тексту присваивается формат стандартного текста 1. Так как для каждого формата DataObject содержит лишь один текст с этим форматом, то фактически формат играет роль ключа, по которому текст заносится и извлекается из DataObject. Метод GetFormat позволяет узнать, имеется ли в объекте DataObject текст определенного формата:

BooleanVar = объект. GetFormat (format)

Переменная BooleanVar получит значение True, если данные с указанным форматом входят в объект. Объект DataObject может обмениваться данными с буфером обмена посредством методов GetFromClipboard и PutInClipboard. Оператор:

String = объект. GetFromClipboard ()

помещает содержимое буфера обмена в DataObject, а вызов:

объект. PutInClipboard

переносит данные из DataObject, имеющие текстовый формат 1, в буфер обмена.


Допустим, в диалоговом окне имеются два поля ввода TextIn и TextOut, командная кнопка CmbCopy и метка Lable1. Занесем при инициализации окна в поле TextIn текстовую информацию и инициализируем глобальные переменные:

Public NewData As DataObject Public NumClick As Integer

Private Sub UserForm_Initialize () Set NewData = New DataObject 'инициализация объекта NumClick = 0 'число щелчков TextIn. Text = "Пример переноса данных с помощью DataObject "

End Sub

При последовательных щелчках командной кнопки занесем содержимое поля TextIn в объект DataObject методом SetText, из него перенесем в буфер обмена с помощью PutInClipboard, а уже из него поместим в поле TextOut методом Paste. О выполнении очередной операции будет сообщать метка Label1.

Private Sub CmdCopy_Click () Select Case NumClick Case 0 NewData. SetText TextIn. Text Label1. Caption = "Из TextIn в DataObject" Case 1 NewData. PutInClipboard Label1. Caption = "Из DataObject в буфер обмена" Case 2 TextOut. Paste Label1. Caption = "Из буфера обмена в TextOut" End Select

NumClick = NumClick + 1 If NumClick = 3 Then NumClick = 0

End Sub

Разумеется, перенос информации из одного поля в другое можно было осуществить и через буфер обмена, минуя DataObject. Для копирования данных из поля ввода в буфер обмена можно вызвать метод Copy. Более важный метод этого объекта, инициирующий операцию перетаскивания, - StartDrag рассмотрим подробнее.


Объект-родитель


Свойство Parent возвращает имя диалогового окна, объекта или коллекции, которые содержат данный элемент управления, объект или коллекцию. Значение этого свойства можно только читать. Оно полезно в процедурах, получающих в качестве параметров объекты-элементы управления, поскольку позволяет по такому объекту получить доступ к содержащему его диалоговому окну и другим элементам управления окна.



Объект UserForm (диалоговое окно), коллекция UserForms (диалоговые окна)


В этой лекции мы рассмотрим основные объекты, связанные с организацией работы диалоговых окон. К ним относятся отдельные диалоговые окна, их коллекции и стандартные элементы управления, которые можно размещать в диалоговых окнах.

Объект UserForm (диалоговое окно или форма) - прямоугольное окно на экране с размещенными на нем элементами управления - важная часть пользовательского интерфейса. Создание и использование диалоговых окон было рассмотрено в предыдущей лекции. Здесь мы кратко опишем свойства класса UserForm и элементов управления.

Все загруженные в приложение диалоговые окна образуют коллекцию UserForms (диалоговые окна). Она обладает стандартными свойствами Count (Количество), Item (в других коллекциях Item часто выступает как метод, хотя суть от этого не меняется) и методом Add (Добавить). Значение свойства Count равно количеству элементов в коллекции; Item позволяет получить доступ к отдельному элементу коллекции (здесь Item - свойство "по умолчанию", т. е. может опускаться), метод Add (имя_формы) позволяет поместить в коллекцию новое диалоговое окно. Обращение к элементу коллекции имеет вид:

UserForms. Item. (index)

Или

UserForms (index)

Параметр index - число от 0 до UserForms. Count - 1, задающее номер элемента в коллекции. Во втором варианте определенное по умолчанию свойство Item опущено. Заметьте, коллекцию UserForms составляют не формы, спроектированные для работы с документом, а только загруженные формы, те, для которых был выполнен метод Load.

Как и другие объекты-коллекции, UserForms можно использовать для организации цикла по всем загруженным диалоговым окнам приложения. Выражение UserForms (index) можно подставлять как аргумент функции, имеющий тип диалогового окна UserForm

Эта коллекция корректно работает с действительно загруженными окнами, но дает странные результаты, когда загруженных форм нет. Вот небольшой пример работы с документом, имеющим две формы с именами frmMy1 и frmMy2:

Public Sub PropOfForm () Dim MyForm As UserForm


Debug. Print UserForms. Count Debug. Print frmMy1. Name, frmMy1. Caption

Debug. Print UserForms. Count UserForms. Add ("frmMy1")

Debug. Print UserForms. Count For Each MyForm In UserForms Debug. Print MyForm. Caption Next MyForm

UserForms. Add ("frmMy2") Debug. Print UserForms. Count

End Sub

Приведем результаты отладочной печати:

0 frmMy1 Первая 1 2

3

Заметьте, вначале счетчик числа элементов коллекции показывает, что элементов там нет. После работы с формой в операторе Debug (но не ее загрузки) счетчик увеличивается на 1, также как и при выполнении метода Add. Однако в цикле по элементам коллекции заголовки форм не распечатываются - диалоговые формы не доступны.

С коллекциями диалоговых окон приходится работать редко. Чаще всего, работа идет с элементами этих коллекций. Для объектов класса UserForm (Диалоговое окно) определено около 40 свойств. Основные группы свойств и некоторые входящие в них свойства таковы:

имя диалогового окна: (Name) - имя, используемое при обращении к окну в программе; положение окна на экране: Height (Высота), Width (Ширина), Left и Top - координаты верхнего левого угла; изображение окна: BackColor (Цвет фона), Forecolor (Цвет переднего плана), BorderColor (Цвет рамки), Caption (Заголовок) ; картинка в окне: Picture - файл с изображением, PictureSizeMode - вариант размера картинки; полоса прокрутки: ScrollBar - расположение полосы прокрутки в окне (0 - отсутствует, 1 - горизонтальная полоса, 2 - вертикальная, 3 - обе), ScrollHeight и ScrollWeidth - высота и ширина области прокрутки в диалоговом окне, ScrollLeft и ScrollTop - координаты верхнего левого угла области прокрутки; шрифт: Font [значение этого свойства - объект типа шрифт (Font) ].

События: Activate, Deactivate, AddControl, BeforeDragOver, BeforeDropOrPaste, Click, DblClick, Error, KeyDown, KeyUp, KeyPress, Layout, MouseDown, MouseUp, MouseMove, RemoveControl, Scroll, Terminate, Zoom.

Методы: Copy, Cut, Hide, Load, Move, Paste, PrintForm, RedoAction, Repaint, Scroll, SetDefaultTabOrder, Show, UndoAction, Unload.

Выше мы описали процесс разработки диалогового окна. Заметьте, спроектированная форма определяет не один объект (экземпляр класса), а целый класс. Поэтому в программе можно объявлять несколько объектов данного класса и для каждого из них по-разному определять свойства диалогового окна. Вот простой пример:

Dim Myf1 As New frmMy1, Myf2 As New frmMy1, Myf3 As New frmMy2 Debug. Print Myf1. Name, Myf2. Caption, Myf3. Name Myf1. BackColor = vbGreen Myf2. Show Myf1. Show

Здесь определены три объекта, первые два из которых имеют один и тот же класс. Изменение цвета фона диалогового окна отражается только при показе первой формы, вторая ѕ сохраняет исходный цвет.


OptionButton - кнопка-переключатель


Кнопка-переключатель (радио - кнопка или просто переключатель), как и флажок, показывает, выбран ли элемент. Отличие в том, что из нескольких переключателей, объединенных в группу, выбран может быть только один. Объединять переключатели в группу можно двумя способами. Первый: сначала создается элемент Frame - рамка группы, затем в этой рамке размещают переключатели, образующие группу. Они автоматически становятся взаимоисключающими. Другой способ - присвоив группе имя, установить его как значение свойства GroupName для всех переключателей этой группы. У каждого способа свои плюсы и минусы. В первом случае рамка вокруг переключателей помогает пользователю зрительно идентифицировать группу, но она занимает дополнительную площадь в окне (а ведь может потребоваться разместить несколько групп переключателей!), да и рамка перекрывает фон окна. Второй вариант гибче: кнопки одной группы могут размещаться в окне произвольным способом, но сложнее обеспечить ясное выделение каждой группы кнопок.

Перемещение по кнопкам одной группы осуществляется с помощью клавиш-стрелок, при этом фокус перемещается только по элементам данной группы, даже если при обходе с помощью клавиши Tab между кнопками группы включены другие элементы управления. Выбор переключателя, находящегося в фокусе, происходит при нажатии клавиши "пробел" или при щелчке любого переключателя группы - его свойство Value получает значение True, а для всех остальных переключателей группы устанавливается значение False.

События: AfterUpdate, BeforeDragOver, BeforeDropOrPaste, Change, Click, DblClick, Enter, Error, Exit, KeyDown, KeyUp, KeyPress, MouseDown, MouseUp, MouseMove.

Методы: Move, SetFocus, ZOrder.



Параметры внешнего вида объекта


Свойство BackColor определяет цвет фона объекта. При задании из списка свойств объекта на этапе проектирования цвет можно выбрать непосредственно из таблицы цветов. При установке из программы в качестве значений используются целые числа. Цвет можно задавать, используя функцию RGB. Она определяет цвет как смешение трех компонентов, ѕ красной, зеленой и синей составляющим, каждая из которых принимает значения от 0 до 255. Например, RGB (255, 255, 0) задает желтый цвет. Чаще всего, цвет задается константами VBA, например, константа vbGreen определяет зеленый цвет.

Свойство BackStyle определяет прозрачность фона. По умолчанию его значение fmBackStyleOpaque = 1. При этом фон непрозрачен, виден его цвет, заданный свойством BackColor. Если значение BackStyle равно fmBackStyleTransparent = 0, фон прозрачен и виден объект, лежащий под данным объектом. На прозрачность рисунков свойство BackStyle не влияет.

Свойство ForeColor задает цвет переднего плана объекта (текста) ; возможные значения этого свойства такие же, как и у BackColor.

Свойство BorderColor задает цвет рамки (границы) объекта; возможные значения такие же, как и у BackColor.

Свойство BorderStyle определяет наличие или отсутствие рамки. Если его значение - fmBorderStyleNone = 0, видимая рамка у элемента управления отсутствует. При значении fmBorderStyleSingle = 1, у объекта есть рамка (в одну линию). Это значение устанавливается по умолчанию для всех объектов с рамками, кроме элементов управления ComboBox, Frame, Label, ListBox и TextBox, у которых по умолчанию рамки нет.

Альтернативный способ задания внешнего вида границы объекта предоставляет свойство SpecialEffect; вот его значения:

fmSpecialEffectFlat = 0 - внешний вид объекта плоский, он отделяется от окружения границей и цветом; установлено по умолчанию для элементов Image и Label, но может быть установлено для любого элемента; fmSpecialEffectRaised = 1 - верхняя и левая границы объекта подсвечены, а правая и нижняя затенены; fmSpecialEffectSunken = 2 - верхняя и левая границы объекта затенены, а правая и нижняя подсвечены; элемент углублен в окружающее окно; установлено по умолчанию для элементов типа Frame, CheckBox и OptionButton; fmSpecialEffectEtched = 3 - углубленная рамка по краям элемента; fmSpecialEffectBump = 6 - объект выделен выступом снизу и справа, а сверху и слева плоский.

Отметим, что значения 1, 3 и 6 не используются для элементов типаCheckBox и OptionButton.

Для изображения границ объекта используются свойства SpecialEffect либо BorderStyle, но не оба вместе. При установке одного из них система автоматически обнуляет другое.

Свойство ControlTipText определяет краткий текст, который появится на экране рядом с объектом, когда указатель мыши будет находиться на данном объекте.

Булево свойство Visible определяет, виден ли объект на экране; по умолчанию True - объект виден.



Перечень основных элементов управления


Рассмотрим набор элементов управления. Ранее говорилось, что помимо элементов управления, появляющихся на стандартной панели, щелчок по ней правой кнопки открывает большой список дополнительных элементов управления, более того, пользователь имеет возможность расширить этот список. Мы ограничимся сейчас рассмотрением некоторого стандартного набора, который включает следующие объекты:

CheckBox - флажок; ComboBox - комбинированный список (поле со списком) ; CommandButton - командная кнопка; Image - изображение (окно изображения) ; Label - метка (надпись, статический текст) ; ListBox - список (окно списка) ; MultiPage - набор страниц; OptionButton - переключатель (кнопка зависимого выбора) ; ScrollBar - полоса прокрутки; SpinButton - счетчик (ворот) ; TabStrip - полоса вкладок; TextBox - поле ввода (окно редактирования, текстовое поле) ; ToggleButton - выключатель.

В этом списке справа указаны русские эквиваленты английских названий элементов управления. Для некоторых элементов названия и переводы еще не устоялись. Даже в разных продуктах Microsoft некоторые элементы называются по-разному, например элемент TextBox в Visual C++ называется EditСontrol.

Значки различных элементов управления на панели элементов показаны на рис. 13.1. Заметьте, показанный здесь элемент управления ActiveX PlugIn относится к дополнительным элементам.


Рис. 13.1.  Панель элементов

Классы элементов управления обладают широким набором свойств, событий и методов, полное описание которых потребовало бы отдельной книги. Поэтому мы остановимся на типичных ситуациях использования элементов управления, в частности, создании интерфейсов прикладных офисных систем. Вначале мы рассмотрим их общие свойства, затем укажем характерные свойства и перечислим события и методы каждого элемента управления и в отдельных разделах подробней рассмотрим каждое событие и метод.



Перемещение объектов. Как реализовать технику DragAndDrop


При организации интерфейса в диалоговых формах зачастую полезно предоставить пользователю возможность использовать технику DragAndDrop (Переместить и Опустить), когда некоторый объект захватывается мышью, перетаскивается к другому целевому объекту и при опускании изменяет свойства целевого объекта. Типичным примером является возможность перетаскивания элементов из одного списка в другой. Другим примером является перетаскивание писем и опускание их в почтовый ящик. Важным элементом этой техники является изменение внешнего вида курсора. Захват объекта происходит при подведении курсора к объекту и нажатии левой кнопки мыши, В этот момент курсор меняет свою внешнюю форму. Затем, когда происходит перемещение мыши, то в тех областях, где расположен целевой объект, курсор снова меняет форму, показывая, что цель достигнута. Если в этот момент, отпустить левую кнопку, то операция перемещения заканчивается успешно, отпускание кнопки мыши в других областях приводит к неуспеху. Объект DataObject и его метод StartDrag является частью этой технологии работы. Достаточно сложно понять суть этого метода, не разобравшись и в остальных частях этой технологии, в частности, в целом ряде событий, возникающих в процессе перетаскивания.

О событиях пойдет речь чуть далее, а начнем рассмотрение все-таки с метода StartDrag, который инициирует операцию перетаскивания объекта DataObject, хранящего перетаскиваемую информацию. Но прежде стоит рассмотреть пример, на котором весь этот процесс будет объясняться. Будем рассматривать диалоговое окно, имеющее два элемента ѕ список и окно ввода. Список будет содержать цвета, а текстовое окно ввода ѕ цвет, любимый пользователем. Пользователь имеет возможность выбрать любой из элементов списка и перетащить его в окно ввода. Когда пользователь захватывает выбранный им элемент списка, то возникает некоторое событие. В нашем примере это событие MouseMove, обработчик которого и будет вызывать метод StartDrag объекта DataObject, хранящего значение перетаскиваемого элемента.

При организации интерфейса в диалоговых формах зачастую полезно предоставить пользователю возможность использовать технику DragAndDrop (Переместить и Опустить), когда некоторый объект захватывается мышью, перетаскивается к другому целевому объекту и при опускании изменяет свойства целевого объекта. Типичным примером является возможность перетаскивания элементов из одного списка в другой. Другим примером является перетаскивание писем и опускание их в почтовый ящик. Важным элементом этой техники является изменение внешнего вида курсора. Захват объекта происходит при подведении курсора к объекту и нажатии левой кнопки мыши, В этот момент курсор меняет свою внешнюю форму. Затем, когда происходит перемещение мыши, то в тех областях, где расположен целевой объект, курсор снова меняет форму, показывая, что цель достигнута. Если в этот момент, отпустить левую кнопку, то операция перемещения заканчивается успешно, отпускание кнопки мыши в других областях приводит к неуспеху. Объект DataObject и его метод StartDrag является частью этой технологии работы. Достаточно сложно понять суть этого метода, не разобравшись и в остальных частях этой технологии, в частности, в целом ряде событий, возникающих в процессе перетаскивания.

О событиях пойдет речь чуть далее, а начнем рассмотрение все-таки с метода StartDrag, который инициирует операцию перетаскивания объекта DataObject, хранящего перетаскиваемую информацию. Но прежде стоит рассмотреть пример, на котором весь этот процесс будет объясняться. Будем рассматривать диалоговое окно, имеющее два элемента ѕ список и окно ввода. Список будет содержать цвета, а текстовое окно ввода ѕ цвет, любимый пользователем. Пользователь имеет возможность выбрать любой из элементов списка и перетащить его в окно ввода. Когда пользователь захватывает выбранный им элемент списка, то возникает некоторое событие. В нашем примере это событие MouseMove, обработчик которого и будет вызывать метод StartDrag объекта DataObject, хранящего значение перетаскиваемого элемента.


Теперь, когда, хотя бы частично, прояснена ситуация, предшествующая вызову метода, рассмотрим его синтаксис:

Function StartDrag ([Effect As fmDropEffect]) As fmDropEffect

Эта функция обычно вызывается в операторе присваивания вида:

ResultEffect=объект. StartDrag ([Effect as fmDropEffect])

Необязательный параметр Effect и результат выполнения функции принадлежат перечислению fmDropEffect. Константы, входящие в это перечисление имеют следующие значения:

fmDropEffectNone = 0 - не копировать и не передвигать опущенный исходный элемент на место назначения,fmDropEffectCopy = 1 - копировать опущенный исходный элемент на место назначения,fmDropEffectMove = 2 - передвинуть опущенный исходный элемент на место назначения,fmDropEffectCopyOrMove = 3 - скопировать или передвинуть опущенный исходный элемент на место назначения.

Параметр Effect задает цель операции и имеет по умолчанию значение 1 (fmDropEffectCopy). Обычно он опускается, поскольку значение по умолчанию задает наиболее вероятную цель операции. Возвращаемое методом StartDrag значение определяет результат выполнения операции. Его можно использовать для анализа того, что же произошло в результате перетаскивания на самом деле. Важно только понимать, что между запуском метода StartDrag в правой части оператора присваивания и присваиванием результата левой части переменной ResultEffect происходит много событий в процессе перемещения объекта, работают обработчики этих событий и результат говорит о том, как закончился этот процесс.

Вот как выглядит спроектированное нами диалоговое окно "Поле и Список" в процессе работы с ним:


Рис. 13. 6.  Окно "Поле и Список" в процессе работы

В этом диалоговом окне пользователь имеет возможность выбрать произвольный элемент списка "Цвета" и перетащить его мышью в поле "Любимый цвет"

Рассмотрим обработчики событий, поддерживающие процесс перетаскивания. Начнем с обработчика события Initialize для диалогового окна, обеспечивающего инициализацию начального состояния:



Private Sub UserForm_Initialize () With Me. DraggedList . AddItem "Красный" . AddItem "Оранжевый" . AddItem "Желтый" . AddItem "Зеленый" . AddItem "Голубой" . AddItem "Синий" . AddItem "Фиолетовый" . AddItem "Черный" . AddItem "Белый"

End With End Sub

Здесь инициализируется список "Цвета", имеющий имя DraggedList. Когда пользователь, выбирая элемент этого списка, нажимает левую клавишу мыши, готовясь перетащить этот элемент в другое место, у списка возникает событие MouseMove, обработчик которого имеет много параметров. Описание этого события, всех его параметров, описание других используемых нами событий, будут даны в последующих параграфах, а сейчас приведем текст этого обработчика:

Private Sub DraggedList_MouseMove (ByVal Button As Integer, ByVal Shift As Integer, _ ByVal X As Single, ByVal Y As Single) Dim MyDataObject As DataObject Dim Msg As String Msg = "Видимо, Вы уронили цвет при перетаскивании. Повторите операцию!" If Button = 1 Then Debug. Print "MouseMove" Set MyDataObject = New DataObject Dim Effect As Integer MyDataObject. SetText DraggedList. Value Effect = MyDataObject. StartDrag (fmDropEffectCopy) If Effect = 0 Then MsgBox (Msg) Debug. Print "Effect = ", Effect End If

End Sub

О параметрах, как уже говорилось речь пойдет впереди, а сейчас прокомментируем его работу. Если в момент возникновения события нажата левая кнопка мыши, то создается новый объект DataObject, его метод SetText копирует значение выбранного элемента списка, а метод StartDrug запускает процесс перетаскивания. Заметьте, что метод StartDrug можно было бы вызывать без параметра, ѕ на результат это не повлияло бы. Результат перетаскивания анализируется и, если он закончился неуспехом (Effect = 0), то выдается уведомляющее сообщение. Исполняемые операторы окаймлены отладочной печатью, что позволит нам продемонстрировать, что между первой печатью, уведомляющей о начале работы обработчика MouseMove, и последней печатью, уведомляющей о результате работы, будут напечатаны сообщения других обработчиков, к рассмотрению которых мы и переходим.



Событие BeforeDragOver возникает для объекта TextIn (поле ввода "Любимый цвет"), когда курсор в процессе перетаскивания попадает в область, занятую объектом. Заметьте, событие возникает многократно, поскольку курсор находится в этой области некоторое время. Вот текст обработчика этого события:

Private Sub TextIn_BeforeDragOver (ByVal Cancel As MSForms. ReturnBoolean, _ ByVal Data As MSForms. DataObject, ByVal X As Single, _ ByVal Y As Single, ByVal DragState As MSForms. fmDragState, _ ByVal Effect As MSForms. ReturnEffect, ByVal Shift As Integer)

Cancel = True Effect = fmDropEffectCopy Debug. Print "DragOver" End Sub

Заметьте, основное, что делает этот обработчик, он устанавливает значение параметра Effect. Поскольку эффект совпадает с целевым эффектом, то курсор в области, занятой полем TextIn, будет менять свою форму, принимая вид прямоугольника со знаком "+", указывающим, что цель достигнута и можно отпустить левую клавишу мыши. Завершающий оператор отладочной печати позволит проследить за числом вызовов этого обработчика.

Следующее событие для объекта TextIn возникает, когда отпущена левая клавиша мыши в области этого объекта. Вот его обработчик:

Private Sub TextIn_BeforeDropOrPaste (ByVal Cancel As MSForms. ReturnBoolean, _ ByVal Action As MSForms. fmAction, ByVal Data As MSForms. DataObject, _ ByVal X As Single, ByVal Y As Single, ByVal Effect As MSForms. ReturnEffect, _ ByVal Shift As Integer)

Cancel = True Effect = fmDropEffectCopy TextIn. Text = Data. GetText Debug. Print "DragPaste" End Sub

Здесь также возвращается значение эффекта. Главное, завершается операция перетаскивания копированием текста в поле ввода из переданного в качестве параметра объекта Data класса DataObject, хранящего значение цвета, выбранного пользователем.

Совместная работа этих трех обработчиков событий и вызываемые в них методы объекта DataObject - SetText, GetText, StartDrag - обеспечивают в совокупности технику DragAndDrop. В заключение о двух экспериментах при работе с диалоговым окном.


Вначале, мы не донесли выбранный нами цвет до окна ввода, отпустив левую клавишу мыши на дороге к нему. Вот как выглядело сообщение, полученное нами:


Рис. 13.7.  Сообщение о потере объекта при перетаскивании

Затем повторно выбранный нами зеленый цвет был успешно перетащен в окно "Любимый цвет". Приведем отладочную печать этих двух экспериментов:

MouseMove Effect = 0 MouseMove DragOver DragOver DragOver DragPaste Effect = 1

Первые две строчки связаны с неудачной попыткой переноса, когда эффект был нулевым. Следующие строки описывают успешный эксперимент. Заметьте, что между печатью, информирующей о начале работы обработчика MouseMove и его заключительной печатью об успешном эффекте, вклинились сообщения, поступающие от обработчиков событий DragOver и DropOrPaste. Заметьте, я оставил только три сообщения от обработчика DragOver, реально их было 25. На этом описание примера заканчивается, но разговор о событиях еще предстоит.



Теперь, когда, хотя бы частично, прояснена ситуация, предшествующая вызову метода, рассмотрим его синтаксис:

Function StartDrag ([Effect As fmDropEffect]) As fmDropEffect

Эта функция обычно вызывается в операторе присваивания вида:

ResultEffect=объект. StartDrag ([Effect as fmDropEffect])

Необязательный параметр Effect и результат выполнения функции принадлежат перечислению fmDropEffect. Константы, входящие в это перечисление имеют следующие значения:

fmDropEffectNone = 0 - не копировать и не передвигать опущенный исходный элемент на место назначения,fmDropEffectCopy = 1 - копировать опущенный исходный элемент на место назначения,fmDropEffectMove = 2 - передвинуть опущенный исходный элемент на место назначения,fmDropEffectCopyOrMove = 3 - скопировать или передвинуть опущенный исходный элемент на место назначения.

Параметр Effect задает цель операции и имеет по умолчанию значение 1 (fmDropEffectCopy). Обычно он опускается, поскольку значение по умолчанию задает наиболее вероятную цель операции. Возвращаемое методом StartDrag значение определяет результат выполнения операции. Его можно использовать для анализа того, что же произошло в результате перетаскивания на самом деле. Важно только понимать, что между запуском метода StartDrag в правой части оператора присваивания и присваиванием результата левой части переменной ResultEffect происходит много событий в процессе перемещения объекта, работают обработчики этих событий и результат говорит о том, как закончился этот процесс.

Вот как выглядит спроектированное нами диалоговое окно "Поле и Список" в процессе работы с ним:


Рис. 13. 6.  Окно "Поле и Список" в процессе работы

В этом диалоговом окне пользователь имеет возможность выбрать произвольный элемент списка "Цвета" и перетащить его мышью в поле "Любимый цвет"

Рассмотрим обработчики событий, поддерживающие процесс перетаскивания. Начнем с обработчика события Initialize для диалогового окна, обеспечивающего инициализацию начального состояния:



Private Sub UserForm_Initialize () With Me. DraggedList . AddItem "Красный" . AddItem "Оранжевый" . AddItem "Желтый" . AddItem "Зеленый" . AddItem "Голубой" . AddItem "Синий" . AddItem "Фиолетовый" . AddItem "Черный" . AddItem "Белый"

End With End Sub

Здесь инициализируется список "Цвета", имеющий имя DraggedList. Когда пользователь, выбирая элемент этого списка, нажимает левую клавишу мыши, готовясь перетащить этот элемент в другое место, у списка возникает событие MouseMove, обработчик которого имеет много параметров. Описание этого события, всех его параметров, описание других используемых нами событий, будут даны в последующих параграфах, а сейчас приведем текст этого обработчика:

Private Sub DraggedList_MouseMove (ByVal Button As Integer, ByVal Shift As Integer, _ ByVal X As Single, ByVal Y As Single) Dim MyDataObject As DataObject Dim Msg As String Msg = "Видимо, Вы уронили цвет при перетаскивании. Повторите операцию!" If Button = 1 Then Debug. Print "MouseMove" Set MyDataObject = New DataObject Dim Effect As Integer MyDataObject. SetText DraggedList. Value Effect = MyDataObject. StartDrag (fmDropEffectCopy) If Effect = 0 Then MsgBox (Msg) Debug. Print "Effect = ", Effect End If

End Sub

О параметрах, как уже говорилось речь пойдет впереди, а сейчас прокомментируем его работу. Если в момент возникновения события нажата левая кнопка мыши, то создается новый объект DataObject, его метод SetText копирует значение выбранного элемента списка, а метод StartDrug запускает процесс перетаскивания. Заметьте, что метод StartDrug можно было бы вызывать без параметра, ѕ на результат это не повлияло бы. Результат перетаскивания анализируется и, если он закончился неуспехом (Effect = 0), то выдается уведомляющее сообщение. Исполняемые операторы окаймлены отладочной печатью, что позволит нам продемонстрировать, что между первой печатью, уведомляющей о начале работы обработчика MouseMove, и последней печатью, уведомляющей о результате работы, будут напечатаны сообщения других обработчиков, к рассмотрению которых мы и переходим.



Событие BeforeDragOver возникает для объекта TextIn (поле ввода "Любимый цвет"), когда курсор в процессе перетаскивания попадает в область, занятую объектом. Заметьте, событие возникает многократно, поскольку курсор находится в этой области некоторое время. Вот текст обработчика этого события:

Private Sub TextIn_BeforeDragOver (ByVal Cancel As MSForms. ReturnBoolean, _ ByVal Data As MSForms. DataObject, ByVal X As Single, _ ByVal Y As Single, ByVal DragState As MSForms. fmDragState, _ ByVal Effect As MSForms. ReturnEffect, ByVal Shift As Integer)

Cancel = True Effect = fmDropEffectCopy Debug. Print "DragOver" End Sub

Заметьте, основное, что делает этот обработчик, он устанавливает значение параметра Effect. Поскольку эффект совпадает с целевым эффектом, то курсор в области, занятой полем TextIn, будет менять свою форму, принимая вид прямоугольника со знаком "+", указывающим, что цель достигнута и можно отпустить левую клавишу мыши. Завершающий оператор отладочной печати позволит проследить за числом вызовов этого обработчика.

Следующее событие для объекта TextIn возникает, когда отпущена левая клавиша мыши в области этого объекта. Вот его обработчик:

Private Sub TextIn_BeforeDropOrPaste (ByVal Cancel As MSForms. ReturnBoolean, _ ByVal Action As MSForms. fmAction, ByVal Data As MSForms. DataObject, _ ByVal X As Single, ByVal Y As Single, ByVal Effect As MSForms. ReturnEffect, _ ByVal Shift As Integer)

Cancel = True Effect = fmDropEffectCopy TextIn. Text = Data. GetText Debug. Print "DragPaste" End Sub

Здесь также возвращается значение эффекта. Главное, завершается операция перетаскивания копированием текста в поле ввода из переданного в качестве параметра объекта Data класса DataObject, хранящего значение цвета, выбранного пользователем.

Совместная работа этих трех обработчиков событий и вызываемые в них методы объекта DataObject - SetText, GetText, StartDrag - обеспечивают в совокупности технику DragAndDrop. В заключение о двух экспериментах при работе с диалоговым окном.


Вначале, мы не донесли выбранный нами цвет до окна ввода, отпустив левую клавишу мыши на дороге к нему. Вот как выглядело сообщение, полученное нами:


Рис. 13.7.  Сообщение о потере объекта при перетаскивании

Затем повторно выбранный нами зеленый цвет был успешно перетащен в окно "Любимый цвет". Приведем отладочную печать этих двух экспериментов:

MouseMove Effect = 0 MouseMove DragOver DragOver DragOver DragPaste Effect = 1

Первые две строчки связаны с неудачной попыткой переноса, когда эффект был нулевым. Следующие строки описывают успешный эксперимент. Заметьте, что между печатью, информирующей о начале работы обработчика MouseMove и его заключительной печатью об успешном эффекте, вклинились сообщения, поступающие от обработчиков событий DragOver и DropOrPaste. Заметьте, я оставил только три сообщения от обработчика DragOver, реально их было 25. На этом описание примера заканчивается, но разговор о событиях еще предстоит.


Dim NewCtrl As Control Dim


Dim NewCtrl As Control Dim Inserted As Boolean
Private Sub UserForm_Initialize () Inserted = False Opb1. Value = True End Sub
Private Sub CommandButton1_Click () If Inserted = False Then If Opb1. Value = True Then ' выбрано поле ввода ' добавляем 2 поля ввода Set NewCtrl = Controls. Add ("Forms. TextBox. 1", "Text1") NewCtrl. Left = 96 NewCtrl. Top = 12 NewCtrl. Width = 80 NewCtrl. Height = 20 NewCtrl. Text = "Введите имя" Set NewCtrl = Controls. Add ("Forms. TextBox. 1", "Text2") Controls ("Text2"). Left = 96 Controls ("Text2"). Top = 50 Controls ("Text2"). Width = 80 Controls ("Text2"). Height = 20 Else ' добавляем список Set NewCtrl = Controls. Add ("Forms. ListBox. 1", "NewList") NewCtrl. Left = 96 NewCtrl. Top = 12 NewCtrl. Width = 80 NewCtrl. Height = 70 NewCtrl. AddItem ("Анна") NewCtrl. AddItem ("Елена") NewCtrl. AddItem ("Ирина") NewCtrl. AddItem ("Мария") End If Inserted = True Else: MsgBox ("Элемент уже добавлен!" & vbCrLf & "Второй добавить не могу!") End If
End Sub
Пример 13.1.
Закрыть окно




Option Explicit Private GlobalName As String
Private Sub CommandButton1_Click () Controls (GlobalName). Cut
End Sub
Private Sub CommandButton2_Click () Controls (GlobalName). Copy End Sub
Private Sub CommandButton3_Click () Controls (GlobalName). Paste End Sub
Private Sub TextBox1_Exit (ByVal Cancel As MSForms. ReturnBoolean) GlobalName = "TextBox1" Cancel = False End Sub
Private Sub TextBox2_Exit (ByVal Cancel As MSForms. ReturnBoolean) GlobalName = "TextBox2" Cancel = False End Sub
Private Sub TextBox3_Exit (ByVal Cancel As MSForms. ReturnBoolean) GlobalName = "TextBox3" Cancel = False End Sub
Private Sub UserForm_Initialize () TextBox1. Text = "Это мой текст" TextBox2. Text = "Это ее текст" TextBox3. Text = "Это его текст"
End Sub
Пример 13.2.
Закрыть окно




Private Sub CommandButton1_Click () If UndoAndRedo. CanUndo = True Then ' отмена возможна UndoAndRedo. UndoAction Else ' отмена невозможна Beep End If
End Sub
Private Sub CommandButton2_Click () If NewText. Text <> "" Then ' вставка новой рубрики ListBox1. AddItem (NewText. Text) Else ' текст не введен Beep End If End Sub
Private Sub CommandButton3_Click () If UndoAndRedo. CanRedo = True Then ' восстановление возможно UndoAndRedo. RedoAction Else ' восстановление невозможно Beep End If End Sub
Private Sub UserForm_Initialize () ListBox1. AddItem "черный" ListBox1. AddItem "белый"
End Sub
Пример 13.3.
Закрыть окно



Расположение объекта


Положение левого верхнего угла элемента управления задается свойствами Left (слева) и Top (сверху), определяющими координаты этого угла относительно левого верхнего угла контейнера - элемента, в который вложен данный. Контейнером может оказаться само диалоговое окно или вкладка элемента MultiPage или TabStrip.

Если оба параметра равны 0, левый верхний угол элемента совпадает с верхним левым углом контейнера. Для большинства систем координаты Left и Top должны находиться в диапазоне от -32767 до +32767. При отрицательных значениях на экране будет видна только часть элемента управления. Значения свойств Top и Left автоматически изменяются, когда пользователь перемещает элемент управления по экрану.

Размеры объекта на экране задаются свойствами Height (высота) и Width (ширина). Единица измерения - точка. Рекомендуемый диапазон значений этих параметров от 0 до 32767. Реальный диапазон зависит от видеосистемы компьютера. Значения свойств Height и Width автоматически изменяются, когда пользователь изменяет размер элемента управления на экране. При этом предыдущие значения размера запоминаются в свойствах OldHeight и OldWidth.



Реализация операций Cut, Copy, Paste в диалоговых окнах


При работе с текстами трудно обойтись без этих, ставших привычными операций. Покажем на примере, как можно реализовать их в диалоговых окнах. Рассмотрим диалоговое окно, содержащее три поля ввода TextBox1, TextBox2, TextBox3 и три командные кнопки CommandButton1, CommandButton2 и CommandButton3 со стандартными изображениями Cut, Copy, Paste: Вот как выглядит это диалоговое окно в момент открытия:


Рис. 13. 12.  Окно "Удалить, Копировать, Вставить" в момент открытия

Наша цель состоит в том, чтобы кнопки работали "стандартным" образом, позволяя, копировать выделенные тексты в буфер из любого текстового окна, удалять выделенные тексты, помещая их в буфер, и, наконец, приклеивать содержимое буфера в точку вставки текстового окна. Методами Cut, Copy, Paste текстовые окна обладают, и единственная проблема состоит в том, что, когда работатет обработчик события Click соответствующей командной кнопки, ему каким-то образом необходимо знать, к какому же полю ввода применить соответствующую операцию. Для этой цели мы приспособили события Exit текстовых окон. При выходе из текстового окна обработчик события Exit запоминает его имя в глобальной переменной. Поэтому, если после выхода будет нажата одна из командных кнопок - Cut, Copy или Paste, ее обработчик по имени элемента управления сумеет понять, к какому полю ввода применить операцию. Этих объяснений, видимо, достаточно, чтобы разобраться в программном коде, решающем поставленную задачу:

Пример 13.2.

(html, txt)

В заключение приведем диалоговое окно, после того, как нажимались кнопки, текст копировался, удалялся, вставлялся.


Рис. 13.13. 



Реализация операций Undo и Redo в диалоговых окнах


Чуть ранее мы рассмотрели пример диалогового окна, в котором созданы аналоги стандартных кнопок Copy, Cut и Paste. Конечно же, во многих ситуациях полезно уметь создавать аналоги и других кнопок, к которым привыкли пользователи. Сейчас мы рассмотрим пример диалогового окна, в котором появятся кнопки Undo и Redo, позволяющие отменять или восстанавливать те или иные действия. Как мы уже говорили, не все действия пользователя при его работе в диалоговом окне могут быть отменены. Тем не менее, наличие таких кнопок упрощает его работу.

Рассмотрим в качестве примера диалоговое окно UndoAndRedo, где помещены поле ввода NewText, список ListBox1 и три командные кнопки CommandButton1, CommandButton2, CommandButton3. Обработчики события Click командных кнопок задают операции Undo, Add (Добавить элемент) и Redo. Текст, введенный в поле NewText, будет добавляться в качестве нового элемента в список ListBox1 при выборе кнопки Add, а выбор Undo и Redo должен приводить к отмене последнего действия или к восстановлению его результата. Если же отмена или восстановление не представляется возможной, то подается звуковой сигнал. Вот как выглядит диалоговое окно в процессе работы:


Рис. 13. 14.  Диалоговое окно с кнопками Undo и Redo

Приведем теперь обработчики событий в совокупности, решающие поставленную задачу:

Пример 13.3.

(html, txt)

Если в этом диалоговом окне ввести текст в поле ввода и выбрать кнопку Add, в списке появится элемент с текстом из поля ввода. При попытке отменить это действие раздастся звуковой сигнал. Зато если щелкнуть кнопку "Отменить" сразу после ввода текста, он исчезнет, но будет восстановлен после нажатия кнопки "Восстановить". Если производится подряд несколько действий, каждое из которых можно отменить и восстановить, система их запоминает и позволяет проводить несколько операций отмены и/или восстановления подряд. В нашем диалоговом окне можно отметить элемент в списке, затем ввести новый текст в поле ввода, а затем отметить другой элемент в списке. Выбор кнопок "Отменить" и "Восстановить" позволяет проследить, как отменяются и восстанавливаются эти действия.



ScrollBar - полоса прокрутки


Элемент управления ScrollBar представляет вертикальную или горизонтальную полосу, на краях которой расположены кнопки прокрутки, а внутри перемещается бегунок. Значение Value, устанавливаемое в полосе прокрутки или возвращаемое ей, - число, определяемое положением бегунка и границами, определенными в свойствах Min и Max. Рекомендуемые значения этих границ от -32767 до +32767 (по умолчанию установлен диапазон [0, 32767]). Если отношение длин левого и правого отрезков, на которые полоса прокрутки делится бегунком, - L:R, то

Value = (Min*R+Max*L) / (L+R).

Обычно полоса прокрутки используется в паре с другим элементом управления, в котором может отображать или с которого может получать свое значение. Ниже представлены две полосы прокрутки - горизонтальная (ScrollBar1) и вертикальная (ScrollBar2), - значения которых отображаются в двух полях ввода TextBox1 и TextBox2.


увеличить изображение
Рис. 13. 5.  Полосы прокрутки

Достаточно определить для этих полос прокрутки процедуры обработки события Change, возникающего всякий раз при изменении положения бегунка и, следовательно, значения Value. Вот эта процедура для полосы ScrollBar1:

Private Sub ScrollBar1_Change () TextBox1. Text = ScrollBar1. Value ' запись нового значения в поле End Sub

И еще несколько важных свойств полосы прокрутки.

Горизонтальная или вертикальная ориентация полосы прокрутки определяется свойством Orientation. При его значении по умолчанию fmOrientationAuto = - 1, ориентация полосы определяется автоматически в зависимости от ее размера по горизонтали и вертикали (больший размер задает ориентацию) ; FmOrientationVertical = 0 задает вертикальную ориентацию полосы, FmOrientationHorizontal = 1 - горизонтальную.Свойства LargeChange и SmallChange определяют, на сколько изменится значение Value при одном щелчке поверхности полосы между кнопкой прокрутки и бегунком в первом случае, и при щелчке кнопки прокрутки - во втором. Эти же свойства указывают, насколько при этом смещается бегунок. По умолчанию оба свойства равны 1. Рекомендуемая область значений обоих свойств от -32, 767 до 32, 767.Свойство Delay (задержка) определяет время в миллисекундах, через которое последовательно возникают события Change, если пользователь непрерывно щелкает кнопку прокрутки или левую кнопку мыши, указывающей на полосу прокрутки. По умолчанию устанавливается значение в 50 миллисекунд.Свойство ProportionalThumb определяет размер бегунка: True - размер бегунка пропорционален размеру области прокрутки (это значение по умолчанию) ; False - истема определяет фиксированный размер бегунка.

События: AfterUpdate, BeforeDragOver, BeforeUpdate, Change, Enter, Error, Exit, KeyDown, KeyUp, KeyPress, Scroll.

Методы: Move, SetFocus, ZOrder.



Шрифт


Свойство Font (шрифт) определяет характеристики символов, используемых в тексте диалогового окна или элемента управления. Значение этого свойства имеет тип Object. Основное свойство шрифта - имя Name. Если оно не указано, используется системный шрифт.

Визуальные характеристики шрифта устанавливают булевы свойства: Bold - полужирное начертание, Italic - наклонное, Underline - подчеркивание. Размер шрифта в точках задается свойством Size. Свойство Weight задает затемненность символов при печати.



Событие AddControl (добавился элемент)


Событие AddControl возникает при добавлении во время работы программы нового элемента управления в диалоговое окно (UserForm), рамку (Frame), набор вкладок (MultiPage) или на одну вкладку (Page). При добавлении элементов на стадии проектирования окна и при выводе окна на экран в процессе работы это событие не возникает. Инициируется оно методом Add (Добавить).

Процедура обработки этого события не имеет аргументов при добавлении элемента в рамку или вкладку:

Private Sub объект_AddControl ()

Для диалогового окна в качестве параметра передается добавляемый элемент:

Private Sub UserForm_AddControl (ByVal ctrl As MSForms. Control)

При добавлении элемента в набор страниц вызов этой процедуры имеет вид:

Private Sub объект_AddControl (index As Long, ctrl As Control)

Здесь объект - это тот объект, в который добавляется элемент управления, index - индекс вкладки, в которую добавляется элемент, а ctrl - сам добавляемый элемент.

Процедура следующего примера выводит на экран сообщение всякий раз при добавлении нового элемента управления к диалоговому окну

Private Sub UserForm_AddControl (ByVal Ctrl As MSForms. Control) MsgBox "Появился новый элемент" End Sub



Событие AfterUpdate (После модификации)


Возникает после изменения пользователем данных в элементе управления. Это событие не может быть отменено. Оно происходит после события BeforeUpdate и перед событием Exit для текущего элемента и перед событием Enter для элемента, на который переместится фокус после нажатия клавиши Tab. Вызов процедуры обработки события AfterUpdate имеет вид:

Private Sub объект_AfterUpdate ()



Событие BeforeDragOver (Перед завершением перетаскивания)


Это событие, возникающее при перетаскивании элемента, можно использовать для управления курсором, когда он попадает, покидает или находится в площади объекта. При перетаскивании объекта система периодически возбуждает событие BeforeDragOver, когда пользователь перемещает мышь, нажимает или отпускает ее кнопки. Положение курсора определяет целевой объект, получающий это событие.

Набор параметров, передаваемых процедуре обработки события BeforeDragOver, зависит от вида элемента управления. Они имеют следующий вид.

для рамки (Frame) :

Private Sub объект_BeforeDragOver (ByVal Cancel As MSForms. ReturnBoolean, ctrl As Control, ByVal Data As DataObject, ByVal X As Single, ByVal Y As Single, ByVal DragState As fmDragState, ByVal Effect As MSForms. ReturnEffect, ByVal Shift As fmShiftState) ;

для набора страниц (MultiPage) :

Private Sub объект_BeforeDragOver (index As Long, ByVal Cancel As MSForms. ReturnBoolean, ctrl As Control, ByVal Data As DataObject, ByVal X As Single, ByVal Y As Single, ByVal DragState As fmDragState, ByVal Effect As MSForms. ReturnEffect, ByVal Shift As fmShiftState) ;

для полосы вкладок (TabStrip) :

Private Sub объект_BeforeDragOver (index As Long, ByVal Cancel As MSForms. ReturnBoolean, ByVal Data As DataObject, ByVal X As Single, ByVal Y As Single, ByVal DragState As fmDragState, ByVal Effect As MSForms. ReturnEffect, ByVal Shift As fmShiftState) ;

для других элементов управления:

Private Sub объект_BeforeDragOver (ByVal Cancel As MSForms. ReturnBoolean, ByVal Data As DataObject, ByVal X As Single, ByVal Y As Single, ByVal DragState As fmDragState, ByVal Effect As MSForms. ReturnEffect, ByVal Shift As fmShiftState).

Здесь объект - имя объекта, которому принадлежит процедура, index - индекс вкладки из набора вкладок, затрагиваемой операцией перетаскивания, Cancel - обязательный статус обработки события, False означает, что оно будет обрабатываться элементом (по умолчанию), True показывает, что событие будет обрабатываться приложением. Параметр ctrl - тот элемент, перетаскивание которого завершается.
Это событие, возникающее при перетаскивании элемента, можно использовать для управления курсором, когда он попадает, покидает или находится в площади объекта. При перетаскивании объекта система периодически возбуждает событие BeforeDragOver, когда пользователь перемещает мышь, нажимает или отпускает ее кнопки. Положение курсора определяет целевой объект, получающий это событие.
Набор параметров, передаваемых процедуре обработки события BeforeDragOver, зависит от вида элемента управления. Они имеют следующий вид.
для рамки (Frame) :
Private Sub объект_BeforeDragOver (ByVal Cancel As MSForms. ReturnBoolean, ctrl As Control, ByVal Data As DataObject, ByVal X As Single, ByVal Y As Single, ByVal DragState As fmDragState, ByVal Effect As MSForms. ReturnEffect, ByVal Shift As fmShiftState) ;
для набора страниц (MultiPage) :
Private Sub объект_BeforeDragOver (index As Long, ByVal Cancel As MSForms. ReturnBoolean, ctrl As Control, ByVal Data As DataObject, ByVal X As Single, ByVal Y As Single, ByVal DragState As fmDragState, ByVal Effect As MSForms. ReturnEffect, ByVal Shift As fmShiftState) ;
для полосы вкладок (TabStrip) :
Private Sub объект_BeforeDragOver (index As Long, ByVal Cancel As MSForms. ReturnBoolean, ByVal Data As DataObject, ByVal X As Single, ByVal Y As Single, ByVal DragState As fmDragState, ByVal Effect As MSForms. ReturnEffect, ByVal Shift As fmShiftState) ;
для других элементов управления:
Private Sub объект_BeforeDragOver (ByVal Cancel As MSForms. ReturnBoolean, ByVal Data As DataObject, ByVal X As Single, ByVal Y As Single, ByVal DragState As fmDragState, ByVal Effect As MSForms. ReturnEffect, ByVal Shift As fmShiftState).

Здесь объект - имя объекта, которому принадлежит процедура, index - индекс вкладки из набора вкладок, затрагиваемой операцией перетаскивания, Cancel - обязательный статус обработки события, False означает, что оно будет обрабатываться элементом (по умолчанию), True показывает, что событие будет обрабатываться приложением. Параметр ctrl - тот элемент, перетаскивание которого завершается.


Параметр Data содержит перетаскиваемые данные в формате объекта типа DataObject. Параметры X и Y задают горизонтальную и вертикальную координаты положения указателя мыши в элементе, измеряемые в точках. X - расстояние от левого края элемента, Y - от верхнего края. Параметр DragState указывает состояние указателя мыши относительно целевого элемента. Его возможные значения: fmDragStateEnter = 0 - указатель внутри целевого элемента, fmDragStateLeave = 1 - указатель вне области целевого элемента, fmDragStateOver = 2 - указатель находится в новом положении, но внутри того же элемента. Параметр Effect определяет возможные операции, выполняемые над опущенным исходным элементом. Его возможные значения те же, что и у описанного выше метода StartDrag. Параметр Shift задает состояние клавиш Shift, Ctrl и Alt. Его возможные значения: fmShiftMask = 1 - нажата клавиша Shift, fmCtrlMask = 2 - клавиша Ctrl, fmAltMask = 4 - Alt.
Большинство элементов управления не поддерживает перетаскивание при значении аргумента Cancel = False (это значение устанавливается по умолчанию). Эти элементы не позволяют перетащить что-либо на себя и не возбуждают событие BeforeDropOrPaste. Исключения - поле ввода (TextBox) и комбинированный список (ComboBox), разрешающие перетаскивание даже при значении параметра Cancel = False.


Параметр Data содержит перетаскиваемые данные в формате объекта типа DataObject. Параметры X и Y задают горизонтальную и вертикальную координаты положения указателя мыши в элементе, измеряемые в точках. X - расстояние от левого края элемента, Y - от верхнего края. Параметр DragState указывает состояние указателя мыши относительно целевого элемента. Его возможные значения: fmDragStateEnter = 0 - указатель внутри целевого элемента, fmDragStateLeave = 1 - указатель вне области целевого элемента, fmDragStateOver = 2 - указатель находится в новом положении, но внутри того же элемента. Параметр Effect определяет возможные операции, выполняемые над опущенным исходным элементом. Его возможные значения те же, что и у описанного выше метода StartDrag. Параметр Shift задает состояние клавиш Shift, Ctrl и Alt. Его возможные значения: fmShiftMask = 1 - нажата клавиша Shift, fmCtrlMask = 2 - клавиша Ctrl, fmAltMask = 4 - Alt.
Большинство элементов управления не поддерживает перетаскивание при значении аргумента Cancel = False (это значение устанавливается по умолчанию). Эти элементы не позволяют перетащить что-либо на себя и не возбуждают событие BeforeDropOrPaste. Исключения - поле ввода (TextBox) и комбинированный список (ComboBox), разрешающие перетаскивание даже при значении параметра Cancel = False.

Событие BeforeDropOrPaste (Перед опусканием или вставкой)


Возникает, когда пользователь собирается поместить или вставить данные в объект. Для набора страниц и полосы вкладок VBA инициирует это событие, когда перемещает данные на элемент, а для остальных элементов - перед операциями опускания или вставки.

Набор параметров, передаваемых процедуре обработки события BeforeDropOrPaste, зависит от типа элемента управления. Они имеют такой вид:

для рамки (Frame) :

Private Sub объект_BeforeDropOrPaste (ByVal Cancel As MSForms. ReturnBoolean, ctrl As Control, ByVal Action As fmAction, ByVal Data As DataObject, ByVal X As Single, ByVal Y As Single, ByVal Effect As MSForms. ReturnEffect, ByVal Shift As fmShiftState),

для набора страниц (MultiPage) :

Private Sub объект_BeforeDropOrPaste (index As Long, ByVal Cancel As MSForms. ReturnBoolean, ctrl As Control, ByVal Action As fmAction, ByVal Data As DataObject, ByVal X As Single, ByVal Y As Single, ByVal Effect As MSForms. ReturnEffect, ByVal Shift As fmShiftState),

для полосы вкладок (TabStrip) :

Private Sub объект_BeforeDropOrPaste (index As Long, ByVal Cancel As MSForms. ReturnBoolean, ByVal Action As fmAction, ByVal Data As DataObject, ByVal X As Single, ByVal Y As Single, ByVal Effect As MSForms. ReturnEffect, ByVal Shift As fmShiftState),

для других элементов:

Private Sub объект_BeforeDropOrPaste (ByVal Cancel As MSForms. Return-Boolean, ByVal Action As fmAction, ByVal Data As DataObject, ByVal X As Single, ByVal Y As Single, ByVal Effect As MSForms. ReturnEffect, ByVal Shift As fmShiftState)

Здесь имя элемента объект и параметры index, Cancel, Data, Effect, X, Y и Shift имеют тот же смысл и значение, что и в процедуре обработки события BeforeDragOver, описанной выше. Параметр Action определяет результат выполняемой операции перетаскивания, основываясь на текущем состоянии клавиатуры. Возможные значения: fmActionPaste = 2 - вставить выбранный объект на предназначенное место, fmActionDragDrop = 3 - указывает, что пользователь перетащил объект с исходного места и опустил его на место назначения.

При обработке этого события можно переустанавливать параметр Action (Action), чтобы задать то действие, которое следует выполнить.

Если Effect равно fmDropEffectCopyOrMove, в качестве значения для Action можно установить fmDropEffectNone, fmDropEffectCopy или fmDropEffectMove. Если Effect равно fmDropEffectCopy или fmDropEffectMove, можно задать значение fmDropEffectNone. Если Effect установлено как fmDropEffectNone, Action изменять нельзя.



Событие BeforeUpdate (Перед модификацией)


Возникает перед изменением данных в элементе управления. Его появление не зависит от того, связаны ли данные элемента с таблицей Excel, т. е. определено ли свойство RowSource. Событие BeforeUpdate предшествует событиям AfterUpdate и Exit для того же элемента управления и событию Enter для элемента, который следующим попадет в фокус. Вот заголовок процедуры обработки этого события:

Private Sub объект_BeforeUpdate (ByVal Cancel As MSForms. ReturnBoolean)

Здесь объект - имя объекта, которому принадлежит процедура, а Cancel - обязательный статус обработки события, его значение False означает, что оно будет обрабатываться элементом (устанавливается по умолчанию), True - что событие будет обрабатываться приложением. При этом элемент остается в фокусе, но ни AfterUpdate, ни Exit для него не инициируются.



Событие Change (Изменение)


Возникает при изменении значения элемента, т. е. свойства Value. Это изменение может быть вызвано как действиями пользователя в диалоговом окне, так и программы. В частности, изменение состояния происходит:

для кнопок - флажка, переключателя и выключателя - после щелчка,для элементов с текстами - поля ввода, комбинированного списка и списка - в результате ввода или выделения нового текста,для набора страниц и полосы вкладок - в результате выбора новой страницы или вкладки,для счетчика - при щелчке одной из стрелок,для полосы прокрутки - при сдвиге бегунка.

Заголовок процедуры обработки события Change:

Private Sub объект_Change ()

где объект - имя объекта, которому принадлежит процедура. Эта процедура - то место в программе, где удобно синхронизировать данные в различных устройствах. Например, она позволяет при выборе нового элемента в списке показать относящийся к нему текст в поле ввода, или изменить показываемое пользователю числовое значение линейки прокрутки при перемещении ее бегунка и т. п.



Событие Click (Щелчок)


Это событие возникает по двум причинам:

пользователь щелкнул элемент управления; пользователь явно выбрал некоторое значение при работе с элементом управления с несколькими возможными значениями.

По первой из этих причин событие Click возбуждается для таких элементов, как командная кнопка (CommandButton), рамка (Frame), изображение (Image), метка (Label), полоса прокрутки (ScrollBar) и счетчик (SpinButton). По второй - для элементов флажок (CheckBox), комбинированный список (ComboBox), список (ListBox), набор страниц (MultiPage), полоса вкладок (TabStrip) и выключатель (ToggleButton). Переключатель (OptionButton) также возбуждает это событие, когда меняет свое значение на True. В частности, событие Click наступает при:

щелчке элемента управления (щелчок правой кнопкой не вызывает событие Click) ; щелчке свободного места диалогового окна и по отключенному серому элементу; нажатии клавиш Enter или "пробел", когда в фокусе находится командная кнопка [если никакая командная кнопка не находится в фокусе, то при нажатии Enter событие Click наступает для предопределенной командной кнопки (со значением True свойства Default) ]; нажатии клавиши Esc в диалоговом окне с командной кнопкой, для которой свойство Cancel имеет значение True, при условии, что никакая другая командная кнопка не находится в фокусе; нажатии клавиш-ускорителей.

При щелчке последовательно возбуждаются три события: MouseDown, MouseUp и Click.

Для некоторых элементов управления событие Click связано с изменением значения элемента (свойства Value). Например, для набора страниц и полосы вкладок это происходит при щелчке новой закладки; для флажка и выключателя - при щелчке или нажатии клавиши "пробел", когда они находятся в фокусе, или при изменении их значений из программы; для списка или комбинированного списка - при выборе значения точно соответствующего некоторому значению в раскрывающемся списке (в частности, Click не возникает, если для строки в поле ввода комбинированного списка есть несколько возможных продолжений в раскрывающемся списке) и др. В этих случаях для отслеживания изменений значения элемента лучше использовать событие Change.

Вот заголовок процедуры обработки события Click для набора страниц и полосы вкладок:

Private Sub объект_Click (index As Long)

а для остальных элементов управления:

Private Sub объект_Click ()

Здесь объект - имя объекта, которому принадлежит процедура, а index - индекс страницы, на которой произошел щелчок.



Событие DblClick (Двойной щелчок)


Возникает, когда пользователь, установив указатель на объект, производит двойной щелчок. Для элементов, возбуждающих и событие Click, к событию DblClick приводит следующая цепь событий:

MouseDown; MouseUp; Click; DblClick.

А для элементов, не поддерживающих Click (например, поля ввода), из этой последовательности нужно удалить Click.

Если возвращенное значение свойства Cancel равно True, то при двойном щелчке пользователя второй щелчок игнорируется. Это позволяет, например, сделать так, что одинарный и двойной щелчки имеют одинаковое действие.

Заголовок процедуры обработки события Click для набора страниц и полосы вкладок имеет вид:

Private Sub объект_DblClick (index As Long, ByVal Cancel As MSForms. ReturnBoolean)

а для остальных элементов:

Private Sub объект_DblClick (ByVal Cancel As MSForms. ReturnBoolean)

Здесь объект - имя объекта, которому принадлежит процедура, index - индекс страницы, на которой произошел щелчок, а Cancel - обязательный статус обработки события, его значение. False (по умолчанию) означает, что оно будет обрабатываться элементом, True - что событие будет обрабатываться приложением.



Событие DropButtonClick (Щелчок кнопки списка)


Возникает всякий раз при появлении и исчезновении выпадающего списка. Причиной появления этого события может быть исполняемая программа (вызов метода DropDown) или нажатие пользователем клавиши F4. Когда список исчезает с экрана, событие DropButtonClick инициируется системой.

Заголовок процедуры обработки события имеет вид:

Private Sub объект_DropButtonClick ()



Событие Error (Ошибка)


Возникает, когда элемент управления, обнаружив ошибку (не обрабатываемую данным приложением Office 2000), не может возвратить информацию о ней в вызывающую программу.

Процедура обработки события Error определяет действия системы при возникновении ошибки. Заголовок этой процедуры для набора страниц и полосы вкладок имеет вид:

Private Sub объект_Error (index As Long, ByVal Number As Integer, ByVal Description As MSForms. ReturnString, ByVal SCode As SCode, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, ByVal CancelDisplay As MSForms. ReturnBoolean) ;

для других элементов:

Private Sub объект_Error (ByVal Number As Integer, ByVal Description As MSForms. ReturnString, ByVal SCode As SCode, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, ByVal CancelDisplay As MSForms. ReturnBoolean).

Здесь параметры имеют следующий смысл:

объект - имя объекта, которому принадлежит процедура,index - индекс страницы, на которой произошла ошибка,Number - уникальный номер, используемый элементом для идентификации ошибки,Description - текст с описанием ошибки,SCode - задает код OLE статуса для данной ошибки (нижние 16 битов задают то же число, что и Number),Source - строка, идентифицирующая элемент управления, который инициирует ошибку,HelpFile - полное имя пути к справочному файлу, содержащему описание ошибки,HelpContext - идентификатор контекста файла справки с темой, описывающей ошибку,CancelDisplay - булев параметр, определяющий выводить ли описание ошибки в окне сообщения.



Событие KeyPress (Клавиша нажата)


Возникает, когда пользователь нажимает клавишу с печатаемым символом (ANSI-клавишу). Это событие обычно происходит между нажатием и отпуском нажатой клавиши. Оно также появляется при посылке ANSI-кода в диалоговое окно из макроса с помощью операции SendKeys или из программы VBA оператором SendKeys. Точнее, событие KeyPress возникает при нажатии клавиш:

любого печатаемого символа; Ctrl+символ стандартного алфавита; Ctrl+ любой специальный символ; Backspace; Esc.

Событие KeyPress не возникает:

при нажатии клавиш Tab, Del или Enter; при нажатии клавиш-стрелок; когда при нажатии клавиши перемещается фокус.

Пока нажата ANSI-клавиша, чередуются события KeyDown и KeyPress. Когда пользователь отпускает эту клавишу, инициируется событие KeyUp. Сообщения о нажатии клавиш получает диалоговое окно или элемент управления, находящиеся в фокусе. При этом диалоговое окно может находиться в фокусе, только если в нем нет элементов управления либо все они отключены.

Заголовки процедур обработки этих событий выглядят так:

Private Sub объект_KeyPress (ByVal KeyANSI As MSForms. ReturnInteger)

Здесь объект - имя объекта, которому принадлежит процедура, KeyANSI - число, являющееся стандартным ANSI-кодом нажатой клавиши.

В процедуре обработки события KeyPress можно задать реакцию системы на нажатие пользователем стандартных клавиш или отмеченных выше комбинаций, имеющих код ANSI. Нажатия других клавиш или комбинаций следует обрабатывать процедурами для событий KeyDown и KeyUp.



Событие Layout (Расположение)


Возникает, когда диалоговое окно, рамка или набор страниц изменяют свои размеры. Для элементов со свойством AutoSize, равным True, это событие возникает, когда пользователь изменяет значения свойств, влияющих на размер элементов. Например, увеличение размера шрифта может привести к увеличению размеров поля ввода и рамки, в которой это поле находится, что вызовет событие Layout.

Для набора страниц заголовок процедуры обработки события Layout имеет вид:

Private Sub объект_Layout (index As Long),

а для других объектов:

Private Sub объект_Layout ()

Здесь объект - имя объекта, которому принадлежит процедура, index - индекс той страницы из набора страниц, которая меняет размер.

В процедуре обработки события Layout, можно вычислить новое положение элементов управления и перерисовать экран.



Событие MouseMove (Мышь движется)


Происходит, когда пользователь двигает мышь. Это событие применимо к диалоговым окнам, элементам управления и меткам. Оно непрерывно генерируется при прохождении указателя мыши по объекту. При сдвиге диалогового окна событие MouseMove может возникнуть и при постоянном положении мыши. Если диалоговое окно сдвигается в процедуре обработки этого события, может возникнуть непрерывная цепь событий MouseMove.

Если два элемента управления расположены очень близко друг к другу, то при быстром движении мыши событие MouseMove может не возникнуть для пространства между этими элементами. В таком случае нужно предусмотреть обработку этого события для обоих элементов.

Вот заголовок процедуры обработки события MouseMove для набора страниц и полосы вкладок:

Private Sub объект_MouseMove (index As Long, ByVal Button As fmButton, ByVal Shift As fmShiftState, ByVal X As Single, ByVal Y As Single),

а для других элементов:

Private Sub объект_MouseMove (ByVal Button As fmButton, ByVal Shift As fmShiftState, ByVal X As Single, ByVal Y As Single),

Здесь параметры объект, index, Button, Shift, X и Y имеют тот же смысл, что и для событий MouseDown и MouseUp рассмотренных выше. Но множество значений для параметра Button у MouseMove больше.

ЗначениеОписание
0Никакая кнопка не нажата.
1Нажата левая кнопка.
2Нажата правая кнопка.
3Нажаты левая и правая кнопки.
4Нажата средняя кнопка.
5Нажаты левая и средняя кнопки.
6Нажаты средняя и правая кнопки.
7Нажаты все три кнопки.

Значение, передаваемое в параметре Button, позволяет определить, какие кнопки мыши нажаты при ее движении, а параметр Shift - выяснить, какие из управляющих клавиш Shift, Ctrl и Alt при этом нажаты.



Событие RemoveControl (Удаление элемента)


Возникает при удалении элемента управления из диалогового окна, рамки или страницы.

Заголовок процедуры обработки события RemoveControl для набора страниц имеет вид:

Private Subобъект_RemoveControl (index As Long, ctrl As Control),

а для других объектов:

Private Sub объект_RemoveControl (ctrl As Control)

Здесь объект - имя объекта, которому принадлежит процедура, index - индекс страницы, с которой удаляется элемент, ctrl - удаляемый элемент.



Событие Scroll (Прокрутка)


Возникает, когда пользователь изменяет положение бегунка в полосе прокрутки и может быть возбуждено для полосы прокрутки, диалогового окна и рамки. Источником события Scroll может быть также вызов метода Scroll для диалогового окна. Оно не наступает при изменении значения полосы прокрутки из программы или если пользователь щелкнул не бегунок.

Заголовок процедуры обработки события Scroll для полосы прокрутки имеет вид:

Private Sub объект_Scroll (), для набора страниц:

Private Sub объект_Scroll (index As Long, ActionX As fmScrollAction, ActionY As fmScrollAction, ByVal RequestDx As Single, ByVal RequestDy As Single, ByVal ActualDx As MSForms. ReturnSingle, ByVal ActualDy As MSForms. ReturnSingle),

для рамки и диалогового окна:

Private Sub объект_Scroll (ActionX As fmScrollAction, ActionY As fmScrollAction, ByVal RequestDx As Single, ByVal RequestDy As Single, ByVal ActualDx As MSForms. ReturnSingle, ByVal ActualDy As MSForms. ReturnSingle).

Здесь параметры имеют следующий смысл:

объект - имя объекта, которому принадлежит процедура,index - индекс страницы, на которой происходит прокрутка,ActionX - действие в горизонтальном направлении,ActionY - действие в вертикальном направлении,RequestDx - расстояние в точках, на которое требуется выполнить прокрутку по горизонтали,RequestDy - расстояние в точках, на которое требуется выполнить прокрутку по вертикали,ActualDx - расстояние в точках, на которое произошла прокрутка по горизонтали,ActualDy - расстояние в точках, на которое произошла прокрутка по вертикали.

Вот возможные значения параметров ActionX и ActionY:

fmScrollActionNoChange = 0 нет изменений; fmScrollActionLineUp = 1 небольшой сдвиг вверх на вертикальной полосе; небольшой сдвиг влево на горизонтальной полосе; движение эквивалентно нажатию стрелок вверх и влево на клавиатуре; fmScrollActionLineDown = 2 небольшой сдвиг вниз на вертикальной полосе; небольшой сдвиг вправо на горизонтальной полосе; движение эквивалентно нажатию стрелок вниз и вправо на клавиатуре; fmScrollActionPageUp = 3 на одну страницу вверх на вертикальной полосе прокрутки, на одну страницу влево на горизонтальной полосе прокрутки; движение эквивалентно нажатию клавиши PgUp на клавиатуре для передвижения полосы прокрутки; fmScrollActionPageDown = 4 на одну страницу вниз на вертикальной полосе прокрутки, на одну страницу вправо на горизонтальной полосе прокрутки; движение эквивалентно нажатию клавиши PgDn на клавиатуре для передвижения полосы прокрутки; fmScrollActionBegin = 5 на верхний край вертикальной полосы прокрутки, на левый край горизонтальной полосы прокрутки; fmScrollActionEnd = 6 на нижний край вертикальной полосы прокрутки, на правый край горизонтальной полосы прокрутки; fmScrollActionPropertyChange = 8 означает, что изменилось значение свойства ScrollTop или свойства ScrollLeft; направления и размер сдвига зависят от того, какое из этих свойств изменилось и каково его новое значение; fmScrollActionControlRequest = 9 элемент управления запрашивает свой контейнер выполнить сдвиг; размер сдвига зависит от конкретных взаимодействующих элементов; fmScrollActionFocusRequest = 10 пользователь переходит к другому элементу управления; размер сдвига зависит от расположения выбранного элемента, этот элемент должен переместиться так, чтобы стать полностью видимым.

Событие Scroll с помощью параметров ActionX и ActionY сообщает о происшедшем действии, а с помощью параметров ActualDx и ActualDy передает расстояние, на которое перемещается полоса прокрутки. Используя эти данные, процедура обработки может вычислить новое положение бегунка в полосе и переместить его.



Событие Zoom (Расширение)


Возникает при изменении свойства Zoom у диалогового окна или элементов рамка и набор страниц.

Заголовок процедуры обработки события Zoom для набора страниц имеет вид:

Private Sub объект_Zoom (индекс As Long, Процент As Integer)

а для рамки:

Private Sub объект_Zoom (Percent As Integer)

Здесь объект - имя объекта, которому принадлежит процедура, index - индекс страницы, которая изменяет размер, а Percent (Процент) - задает размер растяжения или сжатия в процентах. Его возможные значения лежат в диапазоне от 10% до 400%. Если значения меньше 100, размер диалогового окна уменьшается, больше 100 - увеличивается. В процедуре можно задать величину этого параметра.

В следующем примере при расширении окна в него добавляется полоса прокрутки, а при уменьшении - она убирается.

Private Sub UserForm_Zoom (Proc As Integer) Dim NewSize As Double If Proc >= 100 Then ' увеличение размера ScrollBars = fmScrollBarsBoth ' создать полосы прокрутки ScrollLeft = 0 ScrollTop = 0 NewSize = Width * Proc / 100 ScrollWidth = NewSize ' ширина полосы прокрутки NewSize = Height * Proc / 100 ScrollHeight = NewSize ' высота полосы прокрутки Else ' уменьшение размера ScrollBars = fmScrollBarsNone ' скрыть полосу прокрутки ScrollLeft = 0 ScrollTop = 0 End If End Sub



События Enter, Exit (Вход, Выход)


Событие Enter возникает перед тем, как фокус переместится на данный элемент из другого элемента диалогового окна. Exit возникает перед тем, как фокус переместится с данного элемента на другой.

Заголовки процедур обработки этих событий имеют вид:

Private Sub объект_Enter () Private Sub объект_Exit (ByVal Cancel As MSForms. ReturnBoolean)

Здесь объект - имя объекта, которому принадлежит процедура, а Cancel - обязательный статус обработки события, его значение False показывает, что оно будет обрабатываться элементом (устанавливается по умолчанию), True - что событие будет обрабатываться приложением, при этом фокус остается на текущем элементе. Таким образом, чтобы оставить в фокусе текущий элемент в процедуре объект_Exit, задайте True параметру Cancel.

Событие Enter естественно использовать для модификации данных в элементе в тот момент, когда он помещается в фокус, в зависимости от состояний и значений других элементов диалогового окна или от данных основного документа приложения. Exit позволяет проверять при выходе из поля ввода оставленные пользователем данные и сообщать об обнаруженных в них ошибках, а при выходе из списка изменять значения других элементов в зависимости от сделанного пользователем выбора.



События KeyDown, KeyUp (Клавиша нажата, Клавиша отпущена)


Событие KeyDown возникает, когда пользователь нажимает клавишу на клавиатуре, а событие KeyUp, - когда отпускает. Пока клавиша нажата, чередуются события KeyDown и KeyPress. Сообщения о нажатии клавиш получает диалоговое окно или элемент управления, находящиеся в фокусе. При этом диалоговое окно может находиться в фокусе, только если в нем нет элементов управления либо все они отключены ("серые"). Эти события появляются и при посылке в диалоговое окно кодов символов из макроса с помощью операции SendKeys или из программы VBA оператором SendKeys. Если посланный символ приводит к перемещению фокуса от одного элемента к другому, событие KeyDown происходит для первого из них, а события KeyPress и KeyUp - для второго.

События KeyDown и KeyUp не возникают при нажатии клавиш, если нажата клавиша:

- Enter, а в диалоговом окне есть командная кнопка со свойством Default, равным True; - Esc, а в диалоговом окне есть кнопка, для которой свойство Cancel равно True.

Заголовки процедур обработки этих событий выглядят так:

Private Sub объект_KeyDown (ByVal KeyCode As MSForms. ReturnInteger, ByVal Shift As fmShiftState)

Private Sub объект_KeyUp (ByVal KeyCode As MSForms. ReturnInteger, ByVal Shift As fmShiftState)

Здесь объект - имя объекта, которому принадлежит процедура, KeyCode - число, являющееся кодом нажатой или отпущенной клавиши. Параметр Shift задает состояние клавиш Shift, Ctrl и Alt. Его возможные значения: fmShiftMask = 1 - нажата клавиша Shift, fmCtrlMask = 2 - нажата клавиша Ctrl, fmAltMask = 4 - нажата клавиша Alt.

Типичные примеры использования событий KeyDown и KeyUp связаны с обработкой нажатий дополнительных (не буквенных) клавиш: функциональных, клавиш-стрелок, Home, End, Pageup, Pagedown и Tab, цифровых. Они позволяют отреагировать также на нажатие комбинаций, состоящих из клавиши стандартной клавиатуры и одной из дополнительных клавиш-модификаторов (Shift, Ctrl или Alt). Для работы же со стандартными символами ANSI удобней использовать событие KeyPress.



События MouseDown, MouseUp (Мышь нажата, Мышь отпущена)


Возникают, когда пользователь нажимает (MouseDown) и отпускает (MouseUp) кнопку мыши.

Заголовки процедур обработки этих событий для набора страниц и полосы вкладок имеют вид:

Private Sub объект_MouseDown (index As Long, ByVal Button As fmButton, ByVal Shift As fmShiftState, ByVal X As Single, ByVal Y As Single)

и

Private Sub объект_MouseUp (index As Long, ByVal Button As fmButton, ByVal Shift As fmShiftState, ByVal X As Single, ByVal Y As Single),

а для других элементов:

Private Sub объект_MouseDown (ByVal Button As fmButton, ByVal Shift As fmShiftState, ByVal X As Single, ByVal Y As Single)

и

Private Sub объект_MouseUp (ByVal Button As fmButton, ByVal Shift As fmShiftState, ByVal X As Single, ByVal Y As Single)

Здесь параметры имеют следующий смысл:

объект - имя объекта, которому принадлежит процедура,index - индекс страницы или вкладки, для которой инициируется событие,Button - число, определяющее, какая кнопка нажата (1 - левая, 2 - правая, 4 - средняя),Shift - состояние клавиш Shift, Ctrl и Alt,X и Y - горизонтальная и вертикальная координаты указателя мыши (измеряются в точках от левого края и от верхнего края окна, рамки или страницы).

Возможные значения параметра Shift:

ЗначениеОписание
1нажата клавиша Shift.
2нажата клавиша Ctrl.
3нажаты клавиши Shift и Ctrl.
4нажата клавиша Alt.
5нажаты клавиши Alt и Shift.
6нажаты клавиши Alt и Ctrl.
7нажаты клавиши Alt, Shift и Ctrl.

Для полосы вкладок параметр index определяет вкладку, которую щелкает пользователь. index - 1 означает, что пользователь щелкнул вне вкладки.

В диалоговом окне события MouseDown и MouseUp генерируются, если пользователь нажимает и отпускает кнопку мыши, когда указатель находится на свободном месте окна или на полосе прокрутки.

Типичная последовательность событий, связанных со щелчками выглядит так:

MouseDown; MouseUp; Click; DblClick; MouseUp.

Если кнопка мыши нажимается в тот момент, когда указатель находится над некоторым объектом, то этот объект "захватывает" мышь и получает в дальнейшем все связанные с ней события, включая последнее MouseUp. Поэтому координаты X и Y не всегда задают точку внутри границ объекта, получающего событие, связанное с мышью.

С помощью процедур обработки событий MouseDown и MouseUp можно выяснить, какая кнопка мыши нажата, и определить реакцию системы на эти щелчки. Параметр Shift позволяет также выяснить, какие из управляющих клавиш Shift, Ctrl и Alt при этом нажаты.



События SpinDown (Уменьшить счетчик), SpinUp (Увеличить счетчик)


Событие SpinDown возникает, когда пользователь щелкает кнопку счетчика "стрелка-вниз" для вертикального счетчика или "стрелка-влево" для горизонтального счетчика. Оно уменьшает значение счетчика. Событие SpinUp возникает, когда выбираются кнопки-стрелки "вверх" или "вправо". Это событие связано с увеличением значения счетчика.

Процедуры обработки этих событий не имеют аргументов:

Private Sub объект_SpinDown (), Private Sub объект_SpinUp ().



SpinButton - счетчик


SpinButton (счетчик, ворот) позволяет пользователю увеличивать и уменьшать числовую характеристику до тех пор, пока он не установит требуемое значение. Один щелчок кнопки прокрутки увеличивает или уменьшает значение свойства Value на величину, заданную свойством SmallChange. Как и для ScrollBar, интервал изменения числовой характеристики определяется значениями свойств Min и Max, вертикальная или горизонтальная ориентация счетчика - свойством Orientation, а задержка между повторными событиями Change - свойством Delay.

Чтобы изменения Value были видны пользователю, счетчик надо связать с полем ввода или с меткой в процедуре обработки события Change так же, как для полосы прокрутки.

События: AfterUpdate, BeforeDragOver, BeforeUpdate, Change, Enter, Error, Exit, KeyDown, KeyUp, KeyPress, SpinDown, SpinUp.

Методы: Move, SetFocus, ZOrder.



Свойства поведения объекта


Булево свойство AutoSize обеспечивает автоматическое приспособление размеров элемента управления к размерам его внутреннего содержимого (названия, текста, элемента списка). Значение по умолчанию False - размеры элемента считаются постоянными; если размеры содержимого выходят за рамки объекта, оно обрезается.

Булево свойство Enabled определяет, может ли элемент управления оказаться в фокусе в результате действий пользователя. True (по умолчанию) делает элемент доступным. False отключает элемент, т. е. не позволяет пользователю получить доступ к нему с помощью мыши и клавиатуры (но элемент управления и в этом случае доступен для процедур программы). Отключенный элемент "сереет", т. е. выглядит на экране более тускло, чем включенный.

Если отключена рамка Frame, одновременно недоступны все находящиеся в ней элементы управления.

Булево свойство TabStop определяет, может ли пользователь установить фокус на данный элемент управления, используя стандартные клавиши Tab или Shift+Tab; по умолчанию равно True, т. е. элемент доступен.

Когда в результате нажатия клавиши Tab или комбинации Shift+Tab фокус должен переместиться на элемент MultiPage или TabStrip, он устанавливается на первую не отключенную закладку соответствующего элемента, т. е. на страницу со значением True свойства Enabled. Если таковой нет, соответствующий элемент отключен и не может попасть в фокус.

Если для командной кнопки значение Enabled - True, а TabStop - False, она не попадает в фокус при обходе элементов с помощью клавиши Tab, но окажется в фокусе, если ее щелкнуть (при условии, что ее свойство TakeFocusOnClick установлено в True).

Булево свойство Locked определяет, может ли пользователь редактировать объект (изменять его значение). По умолчанию оно равно False, т. е. содержимое объекта доступно для редактирования.

Комбинации свойств Enabled и Locked задают различные варианты поведения элемента управления:

- оба свойства истинны: элемент может попасть в фокус и пользователь может копировать, но не редактировать данные элемента; изображение элемента в диалоговом окне нормальное (не серое) ; - Enabled истинно, Locked ложно: элемент управления может попасть в фокус, а его содержимое можно копировать и изменять; - Enabled ложно, Locked истинно: элемент не может попасть в фокус и выглядит тусклым; его данные нельзя ни изменить, ни скопировать; то же происходит, когда оба эти свойства ложны.



TabStrip - полоса вкладок


Элемент TabStrip внешне похож на элемент MultiPage. Он также представляет набор отдельных диалоговых окон - вкладок. Но эти вкладки не являются независимыми диалоговыми окнами - они не содержат элементов управления. Элементы в области, ограниченной рамкой вкладки, так же принадлежат диалоговому окну, как и сама полоса вкладок. Поэтому набор элементов управления, видимых на вкладке, достаточно определить один раз. Он автоматически будет одинаково выглядеть на всех вкладках.

Полосы вкладок в основном используются для вывода/ввода однотипной информации, относящейся к разным объектам (это, например, анкеты, сведения об организациях-поставщиках и покупателях и т. п. ). Имена объектов служат заголовками вкладок. При этом объектов не должно быть слишком много, так как хотя бы начальная часть имени каждого должна быть видна на закладке. Для увеличения числа представленных объектов можно установить свойство MultiRow в True, что позволит создать несколько полос с закладками объектов.

Каждая вкладка из TabStrip - объект типа Tab, а все они включены в коллекцию Tabs. Объекты класса Tab обладают собственными свойствами (например, Name, Caption, index), но не имеют собственных методов и событий. Поэтому для доступа и работы с ними используются события включающей их полосы вкладок TabStrip.

При создании в элемент TabStrip автоматически помещаются две вкладки Tab1 и Tab2. Эти имена можно изменять и можно также добавлять новые вкладки. Чтобы на стадии проектирования добавить новую вкладку, переименовать, передвинуть или удалить имеющуюся, щелкните правой кнопкой мыши полосу закладок и выберите действие в появившемся контекстном меню.

Как и для элемента MultiPage, свойство Value определяет номер текущей активной вкладки в коллекции Tabs, а свойство SelectedItem (его можно только читать) возвращает текущую активную вкладку (как объект). Его используют для установки значений свойств ее элементов управления, соответствующих объекту, информация о котором должна быть представлена на вкладке.
Свойство Count возвращает число вкладок на полосе.

Взгляните на различные способы доступа к отдельным вкладкам TabStrip: в процедуре инициализации диалогового окна Myform использовано 6 разных способов присвоения названий шести вкладкам Tab1 - Tab6.

Private Sub UserForm_Initialize () Dim name1 As String ' Использование коллекции Tabs с числовым параметром TabStrip1. Tabs (0). Caption = "Вкладка 1" 'Использование коллекции Tabs со строковым параметром: name1 = TabStrip1. Tabs (1). Name TabStrip1. Tabs (name1). Caption = "Вкладка 2" 'Использование метода Item коллекции Tabs: TabStrip1. Tabs. Item (2). Caption = "Вкладка 3" ' с номером name1 = TabStrip1. Tabs (3). Name TabStrip1. Tabs. Item (name1). Caption = "Вкладка 4" ' с именем 'Использование имени (Name) объекта Tab: TabStrip1. Tab5. Caption = "Вкладка 5" 'Использование свойства SelectedItem: TabStrip1. Value = 5 ' установка активной вкладки TabStrip1. SelectedItem. Caption = "Вкладка 6" End Sub

Номер текущей активной вкладки передается системой в качестве параметра процедуре, обрабатывающей событие Click. Это позволяет устанавливать нужные значения свойств. Допустим, полоса вкладок MyTabStrip содержит 3 вкладки с информацией о сотрудниках, и на них расположены элементы управления: метка Label1, заголовок которой определяет должность сотрудника, и поле ввода Address с его адресом. Тогда процедура установки этих свойств может выглядеть так:

Private Sub MyTabStrip_Click (ByVal Index As Long) Select Case Index Case 0 Me. Label1. Caption = "зав. сектором" Me. Address. Text = "ул. Молодежная, 42, кв. 124" Case 1 Me. Label1. Caption = "администратор БД" Me. Address. Text = "ул. Московская, 12, кв. 34" Case 2 Me. Label1. Caption = "программист" Me. Address. Text = "пр. Спортивный, 143, кв. 56" End Select End Sub

Большинство свойств элементов MultiPage и TabStrip совпадает как по имени, так и по значению.К ним относятся свойства Style, TabOrientation, MultiRow, TabFixedHeight и TabFixedWidth. Специфические свойства TabStrip - параметры ClientHeight, ClientLeft, ClientTop, ClientWidth - задают расположение и размеры (в точках) внутренней области вкладки, содержащей все элементы управления.

События: BeforeDragOver, BeforeDropOrPaste, Change, Click, DblClick, Enter, Error, Exit, KeyDown, KeyUp, KeyPress, Layout, MouseDown, MouseUp, MouseMove.

Методы: Move, SetFocus, ZOrder.


Temp


новое слово  теперь Привет, вот вставка рисунка  А текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается продолжается текст текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается

продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается текст теперь продолжается



TextBox - поле ввода (окно редактирования)


Элемент TextBox (поле ввода) - основное средство для ввода пользователем числовых и текстовых данных в систему. Его можно использовать и для вывода информации для пользователя. Поле ввода представляет собой простой одно - или многострочный текстовый редактор, имеющий, кроме указанных выше общих свойств объектов-элементов управления, целый ряд специфических свойств.

Свойство Text содержит текст, находящийся в поле ввода (то же значение имеет и свойство Value).Булево свойство MultiLine определяет, сколько редактор содержит строк: одну или несколько. False (по умолчанию) - одна строка; True - допускается много строк.Переход на новую строку при этом регулируется булевым свойством WordWrap. Если оно равно True, текст автоматически переносится на новую строку при достижении правой границы поля. При значении False новая строка в редакторе появляется лишь при обнаружении или при вставке в текст символа перехода на новую строку [клавиши Ctrl+Enter или Shift+Enter - при вводе и Chr (13) или Chr (10) - при выводе]. Иначе при достижении правой границы поля текст сдвигается влево, и ввод продолжается в той же строке. Параметр WordWrap влияет на работу только многострочного редактора (т. е. при MultiLine = True).Булево свойство AutoSize заставляет поле автоматически менять размер, подстраивая его под текст. Его имеет смысл устанавливать в True для полей, используемых для вывода информации (например, для полей с многострочными заголовками или сообщениями).Свойство MaxLength задает максимальную допустимую длину текста в поле ввода. По умолчанию равно 0, что означает отсутствие ограничений (точнее, ограничения накладываются лишь доступной памятью).Свойство TextLength возвращает текущий размер текста в поле (для многострочного текста учитываются также символы перевода строки), а LineCount - текущее количество строк в тексте.Свойство CurLine устанавливает или возвращает номер строки редактора, в которой находится курсор. Строки нумеруются с 0. Свойство CurX задает текущую горизонтальную позицию курсора, а свойство CurTargetX совпадает с CurX при работе в текущей строке, но сохраняет старое значение при переходе на новую строку в результате нажатия клавиш-стрелок, пролистывания или при вставке новой строки.
Эти свойства позволяют управлять положением курсора при перемещении по строкам редактора. Единицей измерения для обоих свойств служит 0. 01 см. Все три свойства работают, только когда поле ввода находится в фокусе.Свойство SelText возвращает текст, выделенный в поле ввода, свойство SelLength возвращает его длину, а SelStart определяет начальную позицию выделенного текста в поле, а если такого текста нет, то позицию курсора. Значения двух последних свойств измеряются в символах и могут лежать в интервале от 0 до общего числа символов в поле. Доступ ко всем трем свойствам возможен всегда независимо от того, находится ли поле ввода в фокусе. Изменение значения свойства SelStart приводит к снятию выделения с текста (SelText становится пустой строкой), установке курсора в новую позицию и установке SelLenght в 0.Поле ввода можно использовать для ввода паролей и других данных, которые не должны появляться на экране, когда пользователь набирает их на клавиатуре. Эта функция поддерживается свойством PasswordChar, задающим символ-заместитель, который появляется на экране при нажатии пользователем любой клавиши. Обычно в качестве такого символа выбирают звездочку "*", тире "-", подчеркивание "_" и т. п. Свойство Text при этом сохраняет настоящий введенный пользователем текст.

События: AfterUpdate, BeforeDragOver, BeforeDropOrPaste, BeforeUpdate, Change, DblClick, DropButtonClick, Enter, Error, Exit, KeyDown, KeyUp, KeyPress, MouseDown, MouseUp, MouseMove.

Методы: Copy, Cut, Move, Paste, SetFocus, ZOrder.


ToggleButton - выключатель


Элемент выключатель (ToggleButton) показывает, выбран/включен элемент или нет. По своим свойствам и поведению выключатель практически не отличается от элемента CheckBox. Внешнее их отличие в том, что флажок показывает свое состояние с помощью метки, стоящей рядом с его названием, а выключатель - через положение кнопки: "нажата"/"отжата", при этом название пишется внутри прямоугольных границ кнопки.

События: AfterUpdate, BeforeDragOver, BeforeDropOrPaste, BeforeUpdate, Change, Click, DblClick, Enter, Error, Exit, KeyDown, KeyUp, KeyPress, MouseDown, MouseUp, MouseMove.

Методы: Move, SetFocus, Zorder.



Значение объекта


Свойство Value определяет состояние элемента управления или его содержимое.

Для элементов-кнопок CheckBox, OptionButton и ToggleButton свойство Value может принимать значения: Null - нейтральное состояние, True - элемент выбран (включен, отмечен), False - элемент не выбран (отключен, не отмечен).

Для элементов ScrollBar и SpinButton значение Value - целое число в промежутке, заданном свойствами Min и Max.

Для элементов-списков ComboBox и ListBox это значение в выбранной строке (если в списке несколько столбцов, берется значение из столбца, заданного свойством BoundColumn).

Для управляющей кнопки CommandButton значение всегда False. Если из программы установить его в True, это вызовет событие Click (щелчок кнопки).

Для элементов MultiPage и TabStrip значение задает номер текущей активной страницы (вкладки). Нумерация страниц начинается с 0.

Значение элемента TextBox - текущий текст в поле редактирования.

В списках, допускающих множественный выбор, свойство Value не применяется.

Значение элемента управления, оказавшегося в фокусе, хранится также в свойстве BoundValue, которое сохраняет значение в процессе редактирования устройства, в то время как Value отражает текущие изменения значения. По завершении редактирования оба свойства совпадают.