Элемент управления TabStrip предназначен для создания многостраничных окон с закладками (или, иначе, вкладками -- tabs) и внешне похож на алфавит записной книжки. Он состоит из одной или нескольких закладок - объектов Tab, принадлежащих к коллекции Tabs, а также общей области, в которой для каждой закладки выводится своя информация.
Публикуется с разрешения авторов. (С) Андрей Колесов, Ольга Павлова Вперые опубликовано в электронной версии журнала "Мир ПК" N 3/99 | | Элемент управления TabStrip предназначен для создания многостраничных окон с закладками (или, иначе, вкладками -- tabs) и внешне похож на алфавит записной книжки. Он состоит из одной или нескольких закладок - объектов Tab, принадлежащих к коллекции Tabs, а также общей области, в которой для каждой закладки выводится своя информация. Как во время разработки, так и во время выполнения программы закладки можно добавлять к TabStrip и удалять из него, а также менять их свойства. Окна с закладками широко применяются для настройки программ и различных сложных объектов, особенно когда число параметров велико и при этом они допускают естественную группировку по какому-либо логическому принципу (например, TabStrip удобно использовать для настройки параметров форматирования текста совместно с элементом управления RichTextBox). Внешний вид TabStrip Закладки могут выглядеть либо как прямоугольные кнопки, либо как алфавит записной книжки. Их вид определяется свойством Style элемента TabStrip: кнопкам соответствует значение tabButtons, алфавиту - значение tabTabs. В TabStrip всегда выделяется внутренняя (клиентская) область и граница. Общий его размер и положение определяются свойствами Top (положение верхней границы), Left (положение левой границы), Height (высота) и Width (ширина). Эти параметры программист настраивает при разработке, непосредственно указывая нужные значения или перемещая маркеры на форме. Размер и положение внутренней (клиентской) области определяется автоматически во время работы программы и возвращается в значениях свойств ClientLeft, ClientTop, ClientHeight и ClientWidth. Если для TabStrip выбран вид tabTabs, то внутренняя область обводится по контуру, если же tabButtons, то она не обводится. Свойство MultiRow обеспечивает расположение закладок в несколько рядов, а свойство TabWidthStyle позволяет управлять их внешним видом. Если оно имеет значение tabFixed, то при включении свойств TabFixedHeight и TabFixedWidth все закладки будут иметь одинаковую высоту и ширину. TabStrip и контейнеры Заметим, что TabStrip - не контейнер: если добавить его к пользовательской форме и затем поместить во внутреннюю область, например, кнопку, эта кнопка не будет перемещаться вместе с TabStrip. Следовательно, самого по себе TabStrip недостаточно, чтобы обеспечить вывод нужной страницы при щелчке по закладке. Для этого необходим еще один элемент управления, являющийся контейнером. Лучше всего создать по отдельному контейнеру для каждого объекта Tab и написать код, который будет выводить и убирать эти контейнеры в зависимости от того, по какой закладке щелкнул пользователь. По размеру они должны соответствовать внутренней области TabStrip. Пользовательская форма во время разработки может при таком подходе выглядеть, например, следующим образом: В нашем примере мы воспользуемся в качестве контейнера рамкой (Frame). Для размещения рамок удобно использовать различные свойства Clientxxx: Private Sub UserForm_Initialize() ' Размещение первой рамки на пользовательской форме frmOne.Left = tbsODE.ClientLeft frmOne.Top = tbsODE.ClientTop frmOne.Width = tbsODE.ClientWidth frmOne.Height = tbsODE.ClientHeight ' Размещение второй рамки на пользовательской форме frmTwo.Left = tbsODE.ClientLeft frmTwo.Top = tbsODE.ClientTop frmTwo.Width = tbsODE.ClientWidth frmTwo.Height = tbsODE.ClientHeight ' Пусть первая рамка будет видимой, а вторая - невидимой frmOne.Visible = True frmTwo.Visible = False End Sub Для установления соответствия между контейнерами и закладками можно использовать свойство SelectedItem и событие Click: Private Sub tbsODE_Click() ' Выбор на основании вкладки, которую щелкнул пользователь Select Case tbsODE.SelectedItem.Index Case 1 ' Первая рамка является видимой, а вторая - невидимой frmOne.Visible = True frmTwo.Visible = False Case 2 ' Вторая рамка является видимой, а первая - невидимой frmOne.Visible = False frmTwo.Visible = True End Select End Sub Примечание 1. Именно этот способ следует применять при группировке элементов управления внутри контейнера. При использовании метода ZOrder, предназначенного для выведения рамки на передний план, объекты, активизирующиеся при нажатии на клавиатуре комбинации + клавиша доступа, будут активизироваться даже тогда, когда контейнер не находится на переднем плане. Примечание 2. Каждую группу переключателей (OptionButton) необходимо поместить в отдельный контейнер; все группы переключателей внутри одного контейнера будут вести себя как одна большая группа. Альтернативы TabStrip В состав MS Office входит библиотека Microsoft Forms 2.0, содержащая элементы управления TabStrip ("Набор вкладок") и MultiPage ("Набор страниц"). Этими компонентами можно пользоваться не только в ODE, не и в стандартной версии Office. TabStrip из Microsoft Forms 2.0 очень похож на описываемый нами элемент управления ActiveX (он содержится в файле ComCtl32.ocx), но наборы поддерживаемых свойств, методов и событий у них несколько различаются (в частности, TabStrip из Forms 2.0 не поддерживает ряд событий OLE). Следует также иметь в виду, что в TabStrip из ComCtl32.ocx нумерация закладок начинается с единицы, а в TabStrip из Forms 2.0 -- с нуля. Чтобы заменить в нашем примере элемент управления на Forms 2.0 TabStrip, потребуется вставить параметр в событие Click и увеличить на единицу значения индексов в операторе Select Case). С элементом управления MultiPage работать очень удобно: каждая его страница представляет собой отдельный контейнер, так что программист не должен создавать свои собственные контейнеры и организовывать работу с ними. Если, например, добавив MultiPage к пользовательской форме, поместить на одну из его страниц кнопку, кнопка будет перемещаться вместе с MultiPage и исчезнет при "закрытии" этой страницы. Пример использования TabStrip Данный пример использования TabStrip относится к Microsoft Excel. Откройте в Excel редактор Visual Basic, добавьте к пользовательской форме элемент управления Microsoft TabStrip Control, version 5.0, после чего выполните следующие шаги: - В окне свойств TabStrip выделите элемент (Custom), а затем нажмите кнопку (...).
- В появившемся диалоговом окне выберите закладку Tabs.
- В текстовом поле Caption введите слово Tasks.
- Нажмите кнопку Insert Tab, введите в поле Caption слово Comments и нажмите кнопку OK.
- Поместите на форму элемент управления Frame ("Рамка").
- Поместите внутрь этой рамки элемент TextBox ("Поле") и два элемента CommandButton ("Кнопка").
- Создайте второй экземпляр рамки с текстовым полем и двумя кнопками (воспользуйтесь командами копирования и вставки).
- Расположите все элементы управления так, как показано на рисунке в разделе "TabStrip и контейнеры".
- Установите значения свойств Name, Caption и Text формы и элементов управления так, как показано в таблице:
Объект | Свойство | Значение | UserForm | Caption | Элемент управления TabStrip | TabStrip | Name | tbsODE | Frame1 | Name | frmOne | Frame1 | Caption | Задачи | TextBox1 | Name | txtTasks | TextBox1 | Text | Пусто | CommandButton1 | Name | cmdTskOK | CommandButton1 | Caption | OK | CommandButton2 | Name | cmdTskCancel | CommandButton2 | Caption | Отмена | Frame2 | Name | frmTwo | Frame2 | Caption | Комментарии | TextBox2 | Name | txtComments | TextBox2 | Text | Пусто | CommandButton3 | Name | cmdComOK | CommandButton3 | Caption | OK | CommandButton4 | Name | cmdComCancel | CommandButton4 | Caption | Отмена | - В окне кода введите следующий текст:
Private Sub cmdComCancel_Click() ' Очистка поля текста txtComments.Text = "" End Sub Private Sub cmdComOK_Click() ' Добавление текста к текущей ячейке Application.ActiveCell = "КОММЕНТАРИЙ: " & txtComments.Text ' Переход на следующую строку ActiveCell.Offset(1, 0).Range("a1").Select ' Очистка поля текста txtComments.Text = "" End Sub Private Sub cmdTskCancel_Click() ' Очистка поля текста txtTasks.Text = "" End Sub Private Sub cmdTskOK_Click() ' Добавление текста к текущей ячейке Application.ActiveCell = "ЗАДАЧА: " & txtTasks.Text ' Переход на следующую строку ActiveCell.Offset(1, 0).Range("a1").Select ' Очистка поля текста txtTasks.Text = "" End Sub Private Sub tbsODE_Click() ' Выбор страницы в зависимости от закладки Select Case tbsODE.SelectedItem.Index Case 1 ' Первая рамка - видимая, вторая - невидимая frmOne.Visible = True frmTwo.Visible = False Case 2 ' Вторая рамка - видимая, первая - невидимая frmOne.Visible = False frmTwo.Visible = True End Select End Sub Private Sub UserForm_Initialize() ' Сопоставление положения рамки с пользовательской формой frmOne.Left = tbsODE.ClientLeft frmOne.Top = tbsODE.ClientTop frmOne.Width = tbsODE.ClientWidth frmOne.Height = tbsODE.ClientHeight frmTwo.Left = tbsODE.ClientLeft frmTwo.Top = tbsODE.ClientTop frmTwo.Width = tbsODE.ClientWidth frmTwo.Height = tbsODE.ClientHeight ' Первая рамка - видимая, вторая - невидимая frmOne.Visible = True frmTwo.Visible = False End Sub - Запустите пример на выполнение. Настройте размеры и положение таблицы Excel и пользовательской формы так, чтобы их можно было видеть одновременно, и попробуйте щелкать по закладкам и вводить данные в текстовые поля (см. рисунок).
Просмотров: 12011
Ваш коментарий будет первым | | |