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

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
Министерство образования и науки Украины
Киевский национальный экономический университет
Криворожский экономический институт
Кафедра информатики
Методические указания
для самостоятельного изучения темы:
«Стандартные элементы управления Visual Basic»,
для студентов всех специальностей
Кривой Рог - 2004
Министерство образования и науки Украины
Киевский национальный экономический университет
Криворожский экономический институт
Кафедра информатики
Методические указания
для самостоятельного изучения темы:
«Стандартные элементы управления Visual Basic»,
для студентов всех специальностей
Утверждено
на заседании кафедры
информатики
Протокол №
от " " 2004 г.
Кривой Рог - 2001
Методические указания для самостоятельного изучения темы: «Стандартные элементы управления Visual Basic», для студентов всех специальностей.
Составители Зеленский А.С., Ж.В. Цымбал. Кривой Рог. Криворожский экономический институт КНЕУ, 2004, - с.
Составители: Зеленский А.С., доцент, д.т.н.
Ж.В. Цымбал, ст. преп.
Рецензент: С.В. Баран, к.э.н., ст. преп.
Содержание
[1] 1. Понятие о стандартных элементах управления [1.0.0.1] Название [1.0.0.2] Назначение [1.0.0.3] PictureBox [1.0.1] Добавление элементов управления в форму [1.1] Выбор имен для элементов управления [1.1.0.1] CheckBox [1.1.0.2] Menu [1.1.0.3] OptionButton [1.1.0.4] PictureBox [2] 2. Основные свойства элементов управления [2.1] Позиция [2.1.1] Цвет [2.2] Свойства BackColor, ForeColor, FillColor [2.3] Параметры шрифта [2.4] Доступность и видимость элемента управления [2.5] Свойство Enabled [2.6] Свойство Visible [2.7] Свойство Name [2.8] Внешний вид [3] 3. Основные события Windows [4] 4. Работа с текстом [4.1] 4.1. Отображение текста в полях типа Label [4.2] 4.2. Ввод текста в текстовые поля (TextBox) [5] 5. Элементы управления для принятия решения [5.0.0.1] CommandButton [5.1] 5.1. Кнопка (Элемент CommandButton) [5.2] 5.2. Флажок (элемент Check Boxes) [5.3] 5.3. Переключатель (элемент Option Button) [5.4] 5.4. Список (Элемент ListBox) [5.4.1] Выбор нескольких пунктов запрещен по умолчанию [5.4.1.1] List1.RemoveItem List1.ListIndex [5.5] 5.5. Поле со списком (элемент ComboBox) [6] 6. Элементы управления специального назначения [6.1] 6.1. Полосы прокрутки (VscrollBar и HscrollBar) [6.2] 6.2. Таймер (элемент управления Timer) [6.3] 6.3. Рамка (элемент Frame) [7] 7. Массив элементов управления [8] 8. Использование графики [9] 9. Элементы управления файлами
[10] [10.1] Item [11] - - - [12] - - - [13] - - - [14] - - - [15] - - - [16] - - - [17] - - - [18] - - - [19] - - - - - - - [20] - - - - - - - [21] - - - - - - - [22] - - - - - - - [23] - - - - - - - [24] - - - - - - - [25] - - - - - - - [26] - - - - - - - [27] - - - [28] - - - [29] - - - [30] - - - [31] - - - [32] - - - [33] - - - [34] - - - [35] 8 [36] 7 [37] 6 [38] 5 [39] 4 [40] 3 [41] 2 [42] 1 [43] 1 [44] 8 [45] 3 [46] 6 [47] 7 [48] 5 [49] 2 [50] 4 [51] Key8 [52] Key7 [53] Key6 [54] Key5 [55] Key4 [56] Key3 [57] Key2 [58] Key1 |
Элементы управления представляют собой небольшие программы, которые выполняют определенные функции. В поставку Visual Basic включен довольно большой набор элементов управления, с помощью которых можно решить большинство типовых задач. Двоичный код стандартных элементов управления размещается в библиотеках динамической компоновки Visual Basic (DLL). Некоторые из элементов управления появляются на экране сразу после запуска Visual Basic. Они расположены в блоке инструментов и используются чаще всего при создании программ. Такие элементы управления называются внутренними. На рис 1.1 показан внешний вид сгруппированных в блоке инструментов внутренних элементов управления, а в таблице 1.1 приведено их краткое описание.
При запуске Visual Basic появляется блок инструментов внутренних элементов управления, с помощью которых можно решить большинство типовых задач. В окне отображены далеко не все инструменты, чтобы добавить какой-либо дополнительный инструмент необходимо выполнить команду Проект Компоненты или щелкнуть правой кнопкой мыши на свободной области блока и в контекстном меню выбрать команду Компоненты.
Рис. 1.1.
Таблица 1.1. Элементы управления блока инструментов Visual Basic
Элемент |
Название |
Назначение |
|
PictureBox |
Место для рисунка |
Используется для отображения графических изображений, может служить контейнером для других элементов управления. |
|
Label |
Надпись |
Служит для отображения текста, который пользователь не может изменить. |
|
TextBox |
Текстовое поле |
Служит для отображения, ввода и редактирования текста. |
|
Frame |
Рамка |
Служит контейнером для других элементов управления, позволяет сгруппировать несколько элементов управления. |
|
CommandButton |
Кнопка |
Служит для инициирования некоторых действий программы после щелчка кнопкой мыши. |
|
CheckBox |
Флажок |
Служит для установки и отображения логических (типа Да/Нет) параметров программы. |
|
OptionButton |
Переключатель |
Служит для выбора одного параметра из нескольких, представленных в группе. |
|
ComboBox |
Поле со списком |
Позволяет пользователю выбрать одно значение из списка, а также ввести новое значение в текстовое поле. |
|
ListBox |
Список |
Служит для выбора элемента из списка. |
|
Horizontal ScrollBar |
Горизонтальная полоса прокрутки |
В зависимости от положения ползунка может получать значение в заданном диапазоне |
|
Vertical ScrollBar |
Вертикальная полоса прокрутки |
||
Timer |
Таймер |
Позволяет программам выполнять различные действия с таймером. |
|
Drive List Box |
Список устройств |
Служит для выбора дискового устройства. |
|
Directory List |
Список каталогов |
Служит для выбора каталога или папки. |
|
File List Box |
Список файлов |
Служит для выбора файлов. |
|
Shape |
Форма |
Отображает некоторую геометрическую фигуру в форме. |
|
Line |
Линия |
Отображает линию в форме. |
|
Image |
Рисунок |
То же, что и Picture Box, но требует гораздо меньше ресурсов системы и не поддерживает некоторые свойства, методы и события. |
|
Data Control |
Объект данных |
Обеспечивает интерфейс между программой и OLE-сервером. |
|
OLE |
Объект OLE |
Объект, доступный для других приложений |
Есть две возможности добавить элемент управления в форму. Один способ дважды щелкнуть на пиктограмме элемента управления в панели элементов. Другой выделить и перетащить.
Главное, что следует знать при работе с элементами управления, то - что к ним можно обращаться как к переменной, присваивая значения определенным свойствам или считывая их.
Способность дать точное имя элементу управления отличает компетентного и аккуратного программиста. Взглянув на имя элементов управления, вы должны иметь возможность распознать и тип элемента управления, и его назначение. Поэтому всегда стоит придерживаться соглашения об именах. Это сделает ваш код более простым для понимания и усовершенствования.
Любой объект формы, такой как текстовое поле, надпись или кнопка, а также сама форма, должен иметь уникальные имена. Ключевым свойством любого объекта Visual Basic является свойство Name. Оно служит для присвоения каждому объекту уникального идентификатора, с помощью которого к нему можно обратиться из программы.
При создании объекта Visual Basic по умолчанию присваивает ему уникальное имя. Например, первой форме проекта присваивается имя Form1, а первому текстовому полю, помещенному в форму, назначается имя Text1.
Любое имя в программе может начинаться с трехбуквенного префикса, набранного строчными буквами, который означает тип объекта. Оставшаяся часть имени должна описывать назначение данного объекта. Например, в имени формы frmMain префикс frm означает, что данное имя принадлежит объекту типа Form. Оставшаяся часть имени Main свидетельствует о том, что это основная форма проекта. В таблице 1.2 перечислены некоторые префиксы для обозначения типа основных объектов (форм и элементов управления) Visual Basic.
Таблица 1.2. Типы объектов Visual Basic и рекомендуемые префиксы имен
Тип объекта |
Префикс |
|
Флажок проверки |
CheckBox |
chk |
Поле со списком |
ComboBox |
cbo |
Кнопка команды |
CommandButton |
cmd |
Окно списка каталогов |
Directory ListBox |
dir |
Окно списка накопителей |
Drive ListBox |
drv |
Окно списка файлов |
File ListBox |
fil |
Форма |
Form |
frm |
Рамка |
Frame |
fra |
Горизонтальная полоса прокрутки |
Horizontal ScrollBar |
hsb |
Изображение |
Image |
img |
Надпись |
Label |
lbl |
Линия |
Line |
lin |
Список |
ListBox |
lst |
Меню |
Menu |
mnu |
Контейнер OLE |
OLE |
ole |
Переключатель |
OptionButton |
opt |
Окно с рисунком |
PictureBox |
pic |
Контур |
Shape |
shp |
Поле текста |
TextBox |
txt |
Таймер |
Timer |
tmr |
Вертикальная полоса прокрутки |
Vertical ScrollBar |
vsb |
Назначаемые объектам имена будут использоваться в программе. Поэтому, чтобы избежать различных опечаток, старайтесь делать их по возможности короче.
Свойства определяют внешний вид и функционирование элемента управления. Например, если требуется установить новую надпись, то следует изменить свойство Caption. Изменять свойства во время выполнения приложения несложно, если рассматривать элементы управления как переменные так, для изменения надписи командной кнопки Commandl используется ее свойство Caption:
Cmdl.Caption ="Новая надпись"
В данном примере свойству Caption объекта Cmdl присваивается значение “Новая надпись”. При этом имя объекта и свойство разделяются точкой:
Control.Свойство =Значение
Проект обычно состоит из нескольких форм, каждая из которых может содержать элементы управления с одинаковым именем. В данном случае синтаксис имеет вид:
[Форма.]Control.Свойство =Значение
В общем случае значение свойства определяется следующим образом:
Значение =[Форма.]Объект.Свойство
Большинство свойств элементов управления доступно как для чтения, так и для изменения. Но есть свойства, которые во время выполнения доступны только для чтения (Read Only); другие же могут быть недоступны при проектировании. Запомнить все свойства всех элементов управления практически невозможно. Для получения информации о каком либо элементе управления, его свойствах, методах и событиях следует обратиться к справке.
Ниже рассматриваются свойства, которыми обладает большинство элементов управления.
Расположение на форме элемента управления определяют четыре свойства :Left, Top, Height и Width. Эти значения по умолчанию используют в качестве единицы измерения твип (twip). Твип 1440-й части дюйма.
Свойства Тор и Left задают координаты верхнего левого угла элемента управления, свойства Height и Width его высоту и ширину. Отсчет в системе координат ведется сверху вниз (Y) и слева направо (X).
Управление цветовым оформлением элементов осуществляется с помощью свойств BackColor, FillColor и ForeColor, которым по умолчанию назначаются стандартные цвета Windows.
Цвет фона устанавливается с помощью свойства BackColor. С помощью свойства ForeColor можно определить или установить цвет, используемый для отображения текста и графики в элементе управления. С помощью свойства FillColor установить цвет заполнения так называемых shapes (рисованных объектов).
При проектировании цвет выбирают в диалоговом окне настройки цвета.
Изменяя цвета во время разработки, обратите внимание, что на самом деле в них содержатся числовые значения, например, голубому цвету соответствует &HFF0000& в шестнадцатеричной или 16711680 в десятичной системах счисления. В Visual Basic имеются встроенные константы для обозначения некоторых цветов. Они перечислены в таблице:
Константа |
Численное значение (в десятичной системе) |
Значение (в шестнадцатеричной системе) |
vbBlack |
0 |
&H000000& |
vbRed |
255 |
&H0000FF& |
vbGreen |
65280 |
&H00FF00& |
vbYellow |
65535 |
&H00FFFF& |
vbBlue |
16711680 |
&HFF0000& |
vbMagenta |
16711935 |
&HFF00FF& |
vbCyan |
16776960 |
&HFFFF00& |
vbWhite |
16777215 |
&HFFFFFF& |
Чтобы установить цвета объекта из программного кода, просто присвойте эти константы свойствам ForeColor и BackColor, как показано на примерах ниже
Form1.ForeColor = vbYellow (желтый цвет)
Form1.BackColor = vbBlue (синий цвет)
Form1.BackColor = 65280 (зеленый цвет)
Form1.BackColor = &HFFFFFF& (белый цвет)
Цветовые константы не просто отвлеченные числа. Каждая из них обозначает интенсивность красной, зеленой и синей составляющих, из которых и состоит выбранный цвет. Если вы хотите создать собственный цвет и знаете, какая у него интенсивность основных цветов, числовое значение цвета легко определить с помощью функции RGB. Каждый основной цвет может иметь интенсивность от 0 до 255. Например, следующий код определяет значение, соответствующее серому цвету (половину красного, синего и зеленого):
Form1.BackColor = RGB(127, 127, 127)
Form1.BackColor = RGB(255, 0, 0) (красный цвет)
При проектировании элемента управления параметры шрифта его подписи задаются в диалоговом окне Font. Во время проектирования программы вид шрифта в элементах управления выбирается путем установки его значений:
Свойство |
Значение |
|
Font.Name |
Имя шрифта |
Один из установленных в вашей системе шрифтов, например “Arial”, “New Times Roman” |
Font.Size |
Размер шрифта |
Размер шрифта в пунктах, 1 пт=1/72 дюйма, например 16 |
Font.Bold |
Полужирный курсив |
True/False |
Font.Italic |
Курсив |
True/False |
Font.Underline |
Подчеркивание |
True/False |
Font.StrikeThrough |
Перечеркивание |
True/False |
Font.Weight |
Толщина символа |
Определяет толщину линии, которой рисуется текст. Может иметь только два значения 400 (обычный) и 700 (полужирный) |
Пример.
Private Sub Command1_Click()
Command1.FontName = "Arial"
Command1.FontSize = 16
Command1.FontBold = True
End Sub
Часто при работе приложения требуется сделать недоступными для пользователя некоторые элементы управления. Для этого используют два свойства Enabled и Visible.
Свойство Enabled определяет, будет ли элемент управления реагировать на событие или нет. Если значение свойств равно False, элемент управления будет недоступен и пользователь не сможет его использовать. Обычно при этом элемент подсвечивается серым цветом («заморожен»), так же, как элементы меню, которые нельзя выбрать.
Свойство Visible позволяет сделать элемент управления невидимым. Если его значение равно False, то он не виден. Если вы выбираете свойство Enabled, это означает, что элемент управления есть, но обратиться к нему пока невозможно. А свойство Visible позволяет "скрыть" элемент от пользователя.
Пример.
Private Sub Cmdl_Click()
Cmdl.Enabled=False
End Sub
Private Sub Cmd2_Click()
Cmd2.Visible=False
End Sub
Свойство Name играет особую роль. Ошибки при его задании часто приводят к серьезным последствиям. Имя является идентификатором элемента управления. Если в приведенном примере изменить имя второй кнопки, то код больше не будет выполняться, так как элемента с именем Cmd2 не существует.
Большинство элементов управления имеет свойство Appearance, отвечающее за отображение элемента управления (без визуальных эффектов или в трехмерном виде).
Кроме того, для большинства элементов управления можно установить значение свойства ToolTipText. Введенный текст отображается в подсказке, которая появляется, если пользователь установит указатель мыши на элементе управления в форме.
События щелчка мыши:
Событие Click вызывается, как только пользователь выполнит щелчок на элементе управления.
Событие DblClick вызывается двойным щелчком кнопкой мыши на элементе управления. Временной интервал между двумя щелчками двойного щелчка устанавливается в панели управления Windows.
Событие MouseDown вызывается при нажатии кнопки мыши. При этом процедуре обработки события передается несколько параметров.
Событие MouseUp вызывается при отпускании кнопки мыши.
Событие MouseMove вызывается, когда пользователь передвигает курсор мыши.
События клавиатуры:
Событие Keypress возвращает код ASCII нажатой клавиши. Процедура передает параметр, содержащий код ASCII нажатой клавиши. Этот параметр передается как значение, т.е. его можно изменять.
События KeyDown, KeyUp вызываются при нажатии (KeyDown) или отпускании (KeyUp) клавиши. Они происходят даже при нажатии специальных клавиш управления, например функциональных клавиш.
Фокусэто одно из важных понятий при обращении к элементам управления в Windows. Система Windows решает, какому приложению передавать нажатие клавиши управление получает активный элемент, т.е. элемент, имеющий фокус. Visual Basic позволяет обрабатывать два события, связанных с передачей фокуса: LostFocus и GotFocus. Если перейти от одного элемента управления к другому, то для предыдущего элемента вызывается событие LostFocus, а для нового GotFocus.
Основным назначением элементов управления типа Label является отображение текста на экране. Чаще всего они используются для подписи расположенных рядом с ними текстовых полей.
Таблица 4.1.1. Наиболее употребительные свойства Label
Свойство |
Описание |
Alignment |
Определяет, отображается ли заголовок метки выровненным по левому краю, центрированным или выровненным по правому краю в пределах метки. |
Autosize |
Расширяет свойства размера метки когда установлено на True, если вы назначаете слишком длинный заголовок который не помещается в текущих границах метки во время выполнения. |
BackColor |
Задает цвет фона метки. Щелкните на стрелке «вниз» палитры BackColor, чтобы увидеть список наиболее употребительных цветов элементов управления Windows. |
BackStyle |
Определяет, виден ли фон сквозь метку. |
BorderStyle |
Определяет, обведена ли метка одной линией. |
Caption |
Содержит текст, который отображается в метке. |
Enabled |
Определяет, является ли метка активной. Вы часто будете изменять свойство Enabled из кода (во время выполнения приложения), когда метка больше не будет нужна. |
Font |
Выдает диалоговое окно Font, в котором можно устанавливать имя шрифта, начертание и размер. |
ForeColor |
Содержит цвет текста метки. |
Height |
Содержит высоту контура метки в твипах. |
Left |
Содержит число твипов между левым краем метки и левым краем окна Form. |
MousePointer |
Определяет форму курсора мыши, когда пользователь помещает мышь поверх метки. |
TabIndex |
Задает порядок метки в фокусном порядке. Хотя метки не могут принимать фок они могут быть частью фокусного порядка. |
ToolTipText |
Содержит текст, который отображается как подсказка ToolTip во время выполнения приложения. |
Top |
Содержит число твипов между верхним краем метки и верхним краем окна Form. |
Visible |
Определяет отображается ли метка или скрыта от пользователя. |
Width |
Содержит ширину метки в твипах. |
Wordwrap |
Определяет раскрывается ли метка, чтобы поместить любой текст, отображаемый в заголовке. |
Поместив в форму элемент управления типа Label, необходимо ввести текст надписи в свойство Caption. Пользователь не может изменить текст, находящийся в полях типа Label. Однако, прямо из программы можно управлять внешним видом и содержимым полей типа Label. Рассмотрим приведенный ниже пример:
Private Sub Label1_Click()
Label1.Caption =”Текущее время: ” & Time$
End Sub
Каждый раз, как только вы щелкните мышью на элементе управления типа Label, в нем появится текущее время.
Размер текста, который можно поместить в Label не должен превышать 65528 символов, т.е. в надписи можно поместить несколько строк и даже абзацев. Единственное условие для этого установить значения свойств AutoSize и WordWrap.
Текст, отображаемый в надписи, помещается в свойство Caption. Чтобы текст помещался в надпись, необходимо установить для свойства AutoSize значение True и размеры элемента будут автоматически подстраиваться под длину текста. От свойства WordWrap зависит способ изменения размеров надписи. Если значение свойства False (по умолчанию) то размеры будут увеличиваться только по горизонтали, True в вертикальном направлении. На рисунке показаны результаты, получаемые при различных значениях свойств AutoSize и WordWrap. Во всех четырех полях находится одинаковый текст и размеры полей первоначально были одинаковы.
Рис. 4.1.1. Результат изменения значений свойств элемента управления типа Label.
С помощью текстовых окон производят ввод, обработку и отображение текста на экране. Содержимое данного элемента управления хранится в свойстве Text. В текстовом поле может находиться как одна буква, слово, а также и несколько строк или даже страниц текста. В программе мы чаще всего будем обращаться именно к этому свойству. Чтобы ограничить количество символов, которые может ввести пользователь с клавиатуры, установите значение свойства MaxLength.
Таблица 4.2.1. Общие свойства элемента управления TextBox
Свойство |
Описание |
Alignment |
Определяет отображается ли текст текстового окна выровненным по левому краю, центрированным или выровненным по правому краю в пределах текстового окна |
BackColor |
Задает цвет фона текстового окна. Щелкните на палитре свойства BackColor что бы увидеть перечень общих цветов элементов управления Windows. |
BorderStyle |
Определяет, обведено ли текстовое окно рамкой из одной линии |
Enabled |
Определяет, является ли текстовое окно активным. Вы часто будете изменять свойство Enabled кодом во время выполнения, когда текстовое окно больше не будет нужным |
Font |
Выдает диалоговое окно Font, в котором можно устанавливать имя шрифта, начертание и размер свойства Техt. |
ForeColor |
Содержит цвет текста текстового окна. |
Height |
Содержит высоту контура текстового окна в твипах. |
Left |
Содержит число твипов между левым краем текстового окна и левым краем окна Form. |
Locked |
Определяет может ли пользователь редактировать текст в текстовом окне. |
MaxLength |
Задает число символов, которые пользователь может вводить в текстовое окно. |
MousePointer |
Определяет форму курсора мыши, когда пользователь помещает мышь поверх текстового окна. |
MulttiLine |
Позволяет текстовому окну вмещать несколько строк текста или устанавливает текстовое окно так чтобы в нем помещалась единственная строка текста. Добавьте линейки прокрутки если хотите поместить текст в многострочное текстовое окно, что бы ваши пользователи могли просматривать текст. |
PasswordChar |
Определяет символ, появляющийся в текстовом окне, когда пользователь вводит пароль, который не позволяет посторонним узнать, что вводит пользователь в текстовое окно. |
ScrollBars |
Определяет, отображаются ли линейки прокрутки по краям многострочного текстового окна. |
TabIndex |
Задает порядок текстового окна в фокусном порядке |
TabStop |
Определяет, может ли текстовое окно принимать фокус |
Text |
Содержит значение текста в текстовом окне Свойство Text изменяется во время выполнения приложения, когда пользователь вводит текст в текстовое окно Если вы задаете начальное значение свойства Text, это значение становится значением по умолчанию, которое отображается в текстовом окне, когда пользователь впервые видит это текстовое окно |
ToolTipText |
Содержит текст, который отображается как подсказка ToolTip во время выполнения |
Top |
Содержит число твипов между верхним краем текстового окна и верхним краем окна Form. |
Visible |
Определяет, отображается ли текстовое окно или скрыто от пользователя |
Width |
Содержит ширину текстового окна в твипах |
Текстовое поле по умолчанию настроено на ввод одной строки текста, что в большинстве случаев вполне достаточно. Если требуется ввести или отобразить на экране большой блок текста, то для этого предусмотрено два специальных свойства MultiLine и ScrollBar.Свойство MultiLine определяет способ отображения текста в текстовом поле. От его значения зависит, будет ли текст находится в одной строке или он будет перенесен по словам на несколько строк. Свойство ScrollBar определяет, будут ли в текстовом поле отображаться полосы прокрутки, и если да, то каков их тип. Оно может принимать одно из четырех значений: 0 None, 1 Horizontal, 2 Vertical и 3 Both. Значение свойства ScrollBar учитывается только в том случае, если свойство MultiLine равно True. На рис. 4.2.1. показано, как влияют значения этих свойств на внешний вид элементов управления типа TextBox.
Рис. 4.2.1. Изменение внешнего вида управления типа TextBox
Одной из удобных возможностей, которую можно часто встретить практически в любом Windowsприложении, является выделение текста. Для этого поместите в обработчик события, возникающего при получении фокуса текстовым полем.
Text1.SelStart=0
Text1.SelLength=Len(Text1.Text)
В приведенном фрагменте программы использованы два основных свойства SelStart и SelLength, которые можно изменить только во время выполнения программы. Свойство SelStart задает начальную позицию текста, находящегося в свойстве Text. Свойство SelLength его длину.
Пример.
Private Sub Txt1_GotFocus() Если в программе необходимо
Txt1.SelStart = 2 удалить часть текста, то
Txt1.SelLength = 6 используйте:
Txt1.SelText = "люблю" Txt1.SelText = ""
End Sub
До запуска После выполнения Удаление части текста
Проверка введенных данных
Чтобы быть уверенным в правильности вводимых данных, необходимо проверить содержимое введенной строки, когда она должна представлять числовое значение. Встроенная функция IsNumeric() возвратит значение True, если строка окажется числом, и значение False, если строка не числовая. Рассмотрим два примера, которые используют эту функцию. В первом в случае ввода в текстовое окно не числовой информации на экран выводится сообщение «Ошибка» и фокус ввода остается в этом окне до тех пор, пока не будет правильно заполнено текстовое окно:
Пример 1.
Private Sub Txt1_LostFocus()
If Not IsNumeric(Txt1) Then
MsgBox «Ошибка!»
Txt1.SetFocus
End If
End Sub
Пример 2. Фрагмент программы не позволяет вводить нецифровые символы. При этом знак «+» и «-» могут быть введены только в 1-ю позицию. Оригинальность программы состоит в том, что при вводе данных из буфера обмена вставка может быть только в том случае, если в целом полученная цепочка символов имеет строго цифровое представление.
Private Sub Txt1_Change()
Dim log As Boolean
Static old_dl As Integer
log = Len(Txt1)=0 Or Len(Txt1)=1 And (Left$(Txt1,1) = "+" Or _
Left$(Txt1, 1) = "-")
If log Or IsNumeric(Txt1) Then old_dl = Len(Txt1): Exit Sub
Txt1.SelStart = Txt1.SelStart - (Len(Txt1) - old_dl)
Txt1.SelLength = Len(Txt1) - old_dl
Txt1.SelText = ""
End Sub
Существует тип вопросов, на которые заранее можно дать однозначный ответ «Да/Нет» или «Женат/Холост», т.е. заранее можно предложить небольшой список готовых ответов. В таблице 5.1 перечислены основные элементы для принятия решения и дано их краткое описание.
Таблица 5.1.Элементы управления, предназначенные для принятия решения
CommandButton |
Кнопка |
Служит для инициирования некоторых действий программы после щелчка на ней кнопкой мыши. |
|
CheckBox |
Флажок |
Служит для установки и отображения логических (типа Да/Нет) параметров программы. |
|
OptionButton |
Переключатель |
Служит для выбора одного параметра из нескольких, представленных в группе. |
|
ComboBox |
Поле со списком |
Позволяет пользователю выбрать одно значение из списка, а также ввести новое значение в текстовое поле. |
|
ListBox |
Список |
Служит для выбора элемента из списка. |
Элемент CommandButton предназначен для инициирования пользователем в программе некоторых действий, которые начинают происходить после щелчка на нем кнопкой мыши. Для его создания в режиме проетирования при двойном щелчке на кнопке формируется процедура отклика нажатия кнопки <имя кнопки>_Click()
Таблица 5.1.1. Общие свойства элемента управления CommandButton
Свойство |
Описание |
BackColor |
Задает цвет фона командной кнопки. Щелкните на стрелке «вниз» палитры Back Color, чтобы увидеть перечень цветов и щелкните System чтобы увидеть перечень наиболее употребительных цветов элементов управления Windows. Перед тем, как командная кнопка отобразит цвет фона, вам необходимо изменить свойство Style с 0-Standard на 1-Graphical |
Cancel |
Определяет, получает ли командная кнопка событие Click, если пользователь нажимает на Esc. |
Caption |
Содержит текст, который отображается на командной кнопке. |
Default |
Определяет, реагирует ли командная кнопка на нажатие на клавишу Enter, даже если какой либо другой элемент управления имеет фокус. |
Enabled |
Определяет является ли командная кнопка активной Часто вы будете изменять свойство Enabled кодом во время выполнения приложения когда командная кнопка больше не будет нужна и вы захотите сделать ее недоступной. |
Font |
Выдает диалоговое окно Font в котором можно установить имя шрифта заголовка начертание и размер |
Height |
Содержит высоту командной кнопки в твипах |
Left |
Содержит число твипов между левым краем командной кнопки и левым краем окна Form |
MousePointer |
Определяет вид курсора мыши, когда пользователь помещает мышь поверх командной кнопки. |
Picture |
Содержит имя графического изображения значка которое отображается на командной кнопке, если свойство Style установлено на 1-Graphical |
Style |
Определяет, отображается ли командная кнопка как стандартная командная кнопке Windows (если установлено на 0-Standard) или как командная кнопка с цветом и возможным изображением |
Tablndex |
Указывает порядок командной кнопки в фокусном порядке |
TabStop |
Определяет, может ли командная кнопка принимать фокус |
ToolTipText |
Содержит текст, который появляется как подсказка ToolTip во время выполнения приложения |
Top |
Содержит число твипов между верхним краем командной кнопки и верхним краем окна Form |
Visible |
Определяет, отображается ли командная кнопка или является скрытой от пользователя (Невидимые элементы управления не могут принимать фокус до тех пор, пока выполняющийся код не изменит свойство Visible на True ) |
Width |
Содержит ширину командной кнопки в твипах |
Хотя большинство пользователей предпочитают щелкать на кнопках мышью, некоторые все же любят пользоваться клавиатурой и вводить команды исключительно с ее помощью. Это легко сделать, назначив кнопке клавишу быстрого доступа. Тогда, если пользователь нажмет клавишу <Alt> и не отпуская ее, нажмет указанную на кнопке клавишу быстрого доступа, возникнет событие Click для данной кнопки формы.
Клавиша быстрого доступа назначается в момент присвоения значению свойству Caption. Поместите в строке, которая будет присвоена свойству Caption, символ амперсанда (&) перед буквой, соответствующей желаемой клавише быстрого доступа. Например, если вы хотите, чтобы после нажатия комбинации клавиш <Alt+P> срабатывала кнопка, на которой написано Print, присвойте свойству Caption этой кнопки строку &Print. Сам символ амперсанда не будет отображен на кнопке, вместо этого следующий за ним символ будет подчеркнут, в результате на кнопке появится надпись Print. Это означает, что для данной кнопки выбрана комбинация клавиш быстрого доступа <Alt+P>.
Пример 1. На форме находятся следующие элементы управления: текстовое окно Txt1, 3 кнопки Cmd1, Cmd2, Cmd3. Щелкая на кнопке Cmd1 в текстовом окне должно появляться слово Ура, щелкая на кнопке Cmd2 текстовое окно должно быть очищено, нажав на кнопку Cmd3 программа должна завершить свою работу и подать звуковой сигнал.
Рис. 5.1.1. Форма к примеру №1
Private Sub Cmd1_Click()
Txt1.Text = Cmd1.Caption
End Sub
Private Sub Cmd2_Click()
Text1.Text = ""
End Sub
Private Sub Cmd3_Click()
Beep
End
End Sub
Пример 2. На форме находятся текстовое окно и кнопка. По щелчку мыши требуется, чтобы в текстовом окне появлялась дата и текущее время.
Private Sub Cmd1_Click()
Txt1.Text = "Сегодня: " & Date$ & " Текущее время: " & Time$
End Sub
Вместо функций Date$ и Time$ можно использовать Now:
Label1.Caption = “Дата и время: ” & Now
Пример 3. С помощью текстовых окон произвести ввод переменных Х и Y и найти сумму этих двух чисел. Результат вывести в текстовое окно Txt3.
Рис. 5.1.2. Форма к примеру №3
Вариант решения 1.
Dim x As Double, y As Double, z As Double
Private Sub Cmd1_Click()
If IsNumeric(Txt1)=True And IsNumeric(Txt2)=True Then
x = Txt1.Text
y = Txt2.Text
z = x + y
Txt3.Text = z
Else
MsgBox "Ошибка ввода данных", vbCritical, "Сообщение"
Exit Sub
End Sub
Private Sub Сmd2_Click()
End
End Sub
Вариант решения 2.
Private Sub Cmd1_Click()
If IsNumeric(Txt1)=False Or IsNumeric(Txt2)=False Then
MsgBox "Ошибка ввода данных", vbCritical, "Сообщение"
Exit Sub
End If
Txt3=CDbl(Txt1)+Txt2
End Sub
Вариант решения 3.
Private Sub Cmd1_Click()
If IsNumeric(Txt1)=False Or IsNumeric(Txt2)=False Then
MsgBox "Ошибка ввода данных", vbCritical, "Сообщение"
Exit Sub
End If
Txt3=Txt1*1+Txt2
End Sub
Флажки используются для отображения логических данных, т.е. данных, которые могут принимать только два значения True или False (Да/Нет, Вкл/Выкл). Когда флажок находится «во включенном состоянии», на нем изображена галочка, если же флажок находится «в выключенном состоянии», квадратик будет пустым. Однако, имеет место и третье состояние, когда элемент управления «заморожен» и нет возможности изменить его состояние.
Состояние |
Значения свойства Value |
Unchecked (Сброшен) |
0 (vbUnchecked ) |
Checked (Установлен) |
1 (vbChecked ) |
Grayed (Недоступен) |
2 (vbGrayed ) |
Рис. 5.2.1. Виды флажков
Внешний вид значка зависит от свойства Style. Если установить значение данного свойства равным 1 Graphical, то вместо обычного квадратика с галочкой, флажок примет вид кнопки, состояние которой (утопленное или приподнятое) зависит от значения соответствующего логического параметра. Кроме того, на кнопку можно поместить какой-нибудь рисунок. На рисунке показано два графических флажка. Для выбора изображения, которое нужно поместить на кнопку, используются два свойства Picture и DownPicture. Эти свойства определяют картинки, которые приводятся для каждого вида 2-х положений.
Пример 4. На форме находятся два флажка, изменяющих вид текста в верхнем поле. Первый флажок отображает текст в поле полужирным шрифтом, а второй курсивным.
Private Sub Chk1_Click()
Txt1.FontBold = Chk1.Value
End Sub
Private Sub Chk2_Click()
Рис. 5.2.2. Форма к примеру 4 Txt2.FontItalic = Chk2.Value
End Sub
Private Sub Cmd1_Click()
End
End Sub
Иногда их называют радиокнопками, поскольку их функции очень похожи на кнопки переключения диапазонов в автомобильных радиоприемниках. Переключатели всегда должны находиться в группах, причем только один из переключателей группы может быть активизирован («нажат»). В исходном состоянии переключатель находится в выключенном состоянии, т.к. свойство Value по умолчанию имеет значение False. Только один переключатель группы может находиться во включенном состоянии (Value - True). Другими словами, как только вы установите значение свойства Value одного из переключателей равным True, аналогичные свойства всех других переключателей данной группы сбрасываются в False.
Набор логически связанных друг с другом переключателей нужно поместить в объект-контейнер, которым обычно является группа (рамка) Frame.
В программе переключатели можно использовать двояко.
Если внутри контейнера помещается массив радиокнопок (вначале проектируется 1 радиокнопка, затем она копируется через буфер обмена и вставляются 2 и 3 радиокнопки), тогда выбор радиокнопки определяется в процедуре отклика по ее индексу, который передается в качестве параметра. Массив радиокнопок целесообразен при большом количестве кнопок, поскольку при этом формируется одна процедура отклика.
Вариант 1.
Private Sub optDrink_Click(Index as Integer)
Select Case Index
Case 0
MsgBox “Вы выбрали чай”
Case 1
MsgBox “Вы выбрали кофе”
Case 2
MsgBox “Вы выбрали какао”
End Select
End Sub
Если радиокнопки помещены в контейнер независимо (они не являются элементами массива) тогда отклик формируется от каждой кнопки. Этот Вариант удобен, когда количество радиокнопок минимально, т.е. равен 2.
Вариант 2.
Private Sub cmdStertDrink_Click()
If optSugar=True then
DoWithSugar
Else
DoWithoutSugar
End If
End Sub
Процедуры носят номинальный характер, т.е. они не приводятся целью фрагмента показать подключение той или иной процедуры, в зависимости от включенной кнопки.
Пример 5. В текстовом окне должны отображаться выбранные компоненты операционной системы и процессора.
Dim i As Integer, j As Integer
Private Sub Form_Load()
i = 0
j = 0
Disp
End Sub
Private Sub Optoc_Click(Index As Integer)
j = Index
Disp
End Sub
Private Sub Opttex_Click(Index As Integer)
i = Index
Disp
End Sub
Sub Disp()
Lbl1.Caption = "Вы выбрали компьютер " & Opttex(i).Caption & _
" с системой "& Optoc(j).Caption
End Sub
Private Sub CmdExit_Click()
End
End Sub
ListBox используются для наглядного представления информации и возможности выбора как одного, так и нескольких его элементов При помещении элемента управления ListBox в форму на экране отображается пустой прямоугольник, внутри которого будет находиться текст «List1» (стандартное имя списка, назначенное Visual Basic). Вертикальная полоса прокрутки появляется автоматически, как только новый добавляемый к списку элемент уже не будет помещаться в выделенной для списка области на экране. (см. рис 5.4.1). У списка нет горизонтальной полосы прокрутки. Поэтому при проектировании списка необходимо, чтобы его ширина была достаточной для отображения самого длинного элемента списка.
Рис. 5.4.1. Элементы ListBox
Таблица 5.4.1. Основные свойства окна списка
Свойство |
Описание |
BackColor |
Определяет фоновый цвет окна списка. |
Columns |
Задает число столбцов. Если значение равно 0, окно списка прокручивается в одном вертикальном столбце. Если 1 или больше, элементы списка располагаются в заданном числе столбцов (одном или нескольких), кроме того, у окна появляется горизонтальная линейка прокрутки, чтобы вы могли просматривать все элементы списка. |
ForeColor |
Определяет цвет текста окна списка. |
Height |
Указывает высоту окна списка в твипах. |
IntegralHeight |
Разрешает или отменяет частичный показ элемента, не помещающегося в окно; например, верхнюю часть последнего элемента списка, нижняя часть которого оказалась за границей окна. |
List |
Это свойство содержит элементы раскрывающегося списка, которые вы можете определить во время разработки программы. Вы можете вводить эти элементы только по одному. Многие программисты предпочитают инициализировать окно списка во время выполнения программы. |
MultiSelect |
Задает правила выбора из окна списка. Если 0 None (значение по умолчанию), то пользователь может выбирать только один элемент, щелкая на нем мышкой или нажимая клавишу пробел. Если 1 Simple, пользователь может выбрать больше чем один элемент, щелкая мышкой или нажимая пробел на элементах списка. Если 2 Extended, пользователь может выбрать несколько элементов, используя комбинации Shift+щелчок и Shift+стрелка, для распространения выбора от предварительно выбранного элемента до текущего. Ctrl+щелчок действует как переключатель выбирает элемент или отменяет выбор. |
Sorted |
Определяет, сортируются ли элементы окна списка. Если False (значение по умолчанию), то список выводится в том порядке, в котором элементы вводились в список. |
Style |
Определяет обычный формат окна списка или с флажками перед элементами списка. |
Основные свойства, устанавливаемые в режиме проектирования
Свойство MultiSelect
Определяет метод выборки пунктов списка. Его значение задается при конструировании. Во время работы приложения значение свойства доступно только для чтения. Значение свойства MultiSelect определяет, может ли пользователь выбрать несколько пунктов списка и метод выборки (табл. ).
Таблица 5.4.2. . Значения свойства MultiSelect
Установка |
Описание |
0 1 2 |
Выбор нескольких пунктов запрещен по умолчаниюПростой выбор нескольких пунктов. Щелчок кнопкой мыши (или нажатие клавиши пробела) выбирает или отменяет пункт списка. Для перемещения фокуса на другой пункт используйте клавиши со стрелкой Расширенный выбор нескольких пунктов. Для выбора нескольких пунктов подряд нажмите клавишу Shift, а затем щелкайте на пунктах мышью (или нажимайте клавиши со стрелкой). Все пункты списка между ранее выбранным и текущим пунктами подсветятся. Чтобы выбрать произвольно расположенные элементы списка (или отменить выбор), нажмите клавишу Ctrl и щелкните на пункте кнопкой мыши |
Свойство Sorted
Если необходимо, чтобы элементы списка всегда были отсортированы, установите значение свойства Sorted равным True. Сделать это можно только во время проектирования: во время выполнения оно доступно только для чтения.
Элемент ListBox является текстовым элементом, т.е. сортировать числовые данные он не может. Чтобы использовать элемент ListBox для сортировки чисел, прежде всего, отформатируйте их, добавив нули в начале каждого числа. Так, число 10 всегда будет отображаться перед числом 5, поскольку строка "10" меньше строки "5" (она начинается с единицы). Если же числа форматировать как "010" и "005", то сортировка будет корректна.
Пункты в элементе ListBox сортируются по возрастанию с учетом регистра. Более того, стандпртные установки изменить невозможно. Элементы «аа», «аА», «АА», «Аа», «ba», «BA» сортируются следующим образом.
«АА»
«Аа»
«аА»
«аа»
«ВА»
«ba»
Символы верхнего регистра появляются впереди тех же символов нижнего. Все слова, начинающиеся с буквы В, появляются после слов, начинающихся с А, но перед словами, начинающимися с буквы С. В пределах группы слов, начинающихся с буквы В, сначала отображаются слова, первая буква которых В, а вслед за ними идут словa, начинающиеся с буквы b.
Свойство Style
Определяет внешний вид элемента. Имеет два значения: 1 - Standard и 2 -Сheckbox. Обратите внимание: левый список не отсортирован, а правый-отсортирован.
Рис.5.4.2. Стили элемента ListBox
Методы элемента ListBox
Для управления элементом ListBox из приложения необходимо иметь возможность:
Метод AddItem
Чтобы добавлять пункты в список, используется метод AddItem. Он имеет следующий синтаксис.
List1.Addltem item, index
Параметр item - это строка, добавляемая в список, а index-ее порядковый номер. Порядковый номер первого элемента списка равен нулю. Аргумент index необязателен. Если его опустить, строка добавляется в конец списка. Если значение свойства Sorted элемента установлено равным True, то пункт вставляется в соответствующее место списка независимо от значения аргумента index.
При занесении элемента в список , можно указать индекс существующего в списке элемента, перед которым будет занесен новый элемент.
List1.AddItem “Новый элемент”, 2
- добавляет перед третьим (0-2) элементом новый.
Пример. Фрагмент кода в процедуре обработки события Load позволяет наполнить список новыми элементами.
Private Sub Form_Load()
Dim i As Integer
For i = 1 To 100
List1.AddItem "Элемент номер " & i
Next
End Sub
Метод RemoveItem
Чтобы удалить пункт из списка, найдите его положение (index) в списке: index необходим методу RemoveItem
List1.RemoveItem Index
Параметр index указывает на порядковый номер удаляемого пункта и является обязательным. Следующий оператор удаляет пункт из начала списка
List1.RemoveItem 0
Метод Clear
Удаляет из списка все элементы. Синтаксис метода несложен.
List1.Clear
Чтобы получить доступ к отдельным пунктам, можно использовать несколько свойств элементов ListBox и ComboBox. Для удаления пункта из списка необходимо знать его порядковый номер, но в данном случае этот аргумент метода RemoveItem используется редко. Как правило, удаляемый пункт выбирает пользователь либо удаляемые пункты выбирают из программного кода по их значениям.
Основные свойства, устанавливаемые в режиме разработки программы
Свойство ListCount
Возвращает число пунктов списка. Доступ к ним можно получить с помощью значений индексов в диапазоне от 0 до ListCount-1.
Свойство List()
Это массив пунктов списка. Элемент массива List(0) содержит первый пункт списка элемент List(l)- второй и т.д., вплоть до последнего элемента- List(ListCount-l), содержащего последний пункт списка. Существует возможность создать готовый список еще во время разработки программы. Для этого нужно поместить элементы списка в свойство List, после ввода текущего элемента для перехода на новую строку нажмите клавишу <Ctrl> + <Enter>.
Массив List() часто используют для просмотра пунктов списка. Для просмотра всех пунктов элемента управления List1 с целью отыскания| и удаления пустых строк применяйте следующий цикл:
For i = List1.ListCount - 1 to 0 Step 1
If List1.List(i) = "" Then
List1.RemoveItem I
End If
Next
Цикл сканирует элементы массива List1() с конца. При удалении каждого пункта длина списка уменьшается на 1. Если сканировать список с начала, число итераций превысит число пунктов списка, что ведет к ошибке исполнения. Если же сканировать список с конца, эта ошибка исключается.
Свойство ListIndex
ListIndex представляет собой индекс выбранного пункта списка. При выборке нескольких пунктов ListIndex представляет индекс последнего выбранного пункта. Это свойство можно использовать для выбора или удаления конкретных пунктов. Так, следующий оператор удаляет выбранный пункт элемента List1:
List1.RemoveItem List1.ListIndex
Если при вызове метода RemoveItem ни один пункт списка не выбран, значение свойства ListIndex равно 1. Попытки удалить пункт с отрицательным индексом приводят к ошибке исполнения. Чтобы избежать этого, проверьте значение свойства ListIndex.
If List1.ListIndex >= 0 Then
List1.RemoveItem List1.ListIndex
End If
После удаления пункта индексы последующих пунктов соответственно перестраиваются.
Существует еще один способ узнать, какой элемент списка выбрал пользователь. Значение свойства Text является строка списка, находящаяся в фокусе. Таким образом, в случае простого списка строка, на которой щелкнул пользователь, автоматически помещается в свойство Text. Если никакой элемент в списке еще не выбран, значение свойства Text равно пустой строке («»).
В приведенном ниже примере происходит удаление выбранного элемента списка при нажатии на клавишу <Delete>. Поместите этот фрагмент кода в процедуру обработки события KeyDown, поступающего от списка.
Private Sub List1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyDelete And List1.ListIndex <> -1 Then
List1.RemoveItem List1.ListIndex
End If
End Sub
Свойство Selected
Selected представляет собой массив, подобный свойству List. Его элементы могут иметь значения True или False в зависимости от состояния соответствующего пункта списка. Если пункт списка выбран, значение свойства Selected данного пункта равно True. В противном случае значение свойства равно False. Поскольку отсутствуют средства, позволяющие получить сразу все индексы при выборке нескольких пунктов, необходимо проверить все элементы массива Selected.
Свойство SelCount
Отображает число выбранных пунктов элемента ListBox, если значение свойства MultiSelect установлено равным 1 (Simple) или 2 (Extended). Обычно это свойство используют вместе с массивом Selected для работы с выбранными пунктами элемента. Если элемент ListBox допускает выборку множества пунктов, рекомендуем применить в списке стиль Checkbox (Флажок). Чтобы пункты списка отмечались флажками (рис.5.4.2), установите значение свойства Style равным 1.
Свойство NewIndex
Возвращает индекс последнего пункта, включенного в список элемента ListBox. Обычно это свойство используют вместе со свойством ItemData, которое рассматривается в пункте «Индексирование с помощью элемента ListBox».
Пример ListDemo
Приложение ListDemo (рис 5.4.3) демонстрирует основные операции с элементом ListBox.
Рис. 5.4.3. Приложение ListDemo демонстрирует большинство операций с элементом ListBox
На форму помещены два элемента ListBox, работающие по-разному. Конфигурация первого элемента стандартна, одновременно может быть выбран только один пункт, а новые пункты включаются в конец списка. Во втором же элементе значение свойства Sorted установлено равным True, значение свойства MultiSelect - 2 (Extended). Таким образом, пункты второго элемента всегда отсортированы, и пользователь может выбрать любое число пунктов (с помощью мыши, удерживая нажатыми клавиши Shift или Ctrl).
В коде приложения ListDemo реализован полный набор логических функций, необходимых при работе с программой управления элемента ListBox. Программный код позволяет:
Кнопка Add New Element. (Включить в список). Использует функцию InputBox(), для приглашения пользователя выполнить ввод новой строки в списки элементов.
Фрагмент программы. Кнопки Add New Element
Private Sub Command5_Click()
Dim listItem As String
listItem = InputBox("Enter item to add to the list")
(Введите добавляемый в список элемент)
If Trim(listItem) <> "" Then
List1.AddItem listItem
End If
End Sub
Подпрограмма проверяет данные, введенные пользователем, не допуская ввод в список пустой строки. Программный код кнопки Clear List (Очистить список) удаляет все записи списка, вызывая метод Clear.
Кнопка Remove Selected Item(s). Программный код кнопки Remove Selected Item . (Удалить выбранный пункт) отличается от программного кода кнопки Remove Selected Items (Удалить выбранные пункты). В первом элементе ListBox можно выбрать только один пункт, а во втором - несколько. Как было уже сказано, удаляемый пункт сначала должен быть выбран.
Фрагмент программы. Кнопка Remove Selected Item.
Private Sub Command3_Click()
If List1.ListIndex > 0 Then
List1.RemoveItem List1.ListIndex
End If
End Sub
Программный код кнопки Remove Selected Items просматривает все пункты списка, а затем удаляет только выделенные.
Фрагмент программы. Кнопка Remove Selected Item
Private Sub Command4_Click()
Dim i As Integer
If List2.SelCount = 1 Then
List2.RemoveItem List2.ListIndex
ElseIf List2.SelCount > 1 Then
For i = List2.ListCount - 1 To 0 Step -1
If List2.Selected(i) Then
List2.RemoveItem i
End If
Next
End If
End Sub
В данном коде проверяется свойство SelCount, указывающее число выбранных пунктов. Если значение свойства SelCount равно единице, то программа удаляет пункт. Если же выбрано несколько пунктов, программа просматривает весь список и удаляет все пункты, у которых значение свойства Selected равно True. Обратите внимание: список просматривается с конца.
Фрагмент программы . Кнопка со стрелкой вправо
Private Sub Command1_Click()
If List1.ListIndex >= 0 Then
List2.AddItem List1.Text
List1.RemoveItem List1.ListIndex
End If
End Sub
Программный код кнопки со стрелкой влево проверяет значение свойства SelCount. Если в списке выбран единственный пункт, то он перемещается в другой список с помощью вышеуказанного кода. Если же выбрано несколько пунктов, программный код просматривает список начиная с конца, копируя и удаляя каждый выбранный пункт.
Фрагмент программы Кнопка со стрелкой влево
Private Sub Command2_Click()
Dim i As Integer
If List2.SelCount = 1 Then
List1.AddItem List2.Text
List2.RemoveItem List2.ListIndex
ElseIf List2.SelCount > 1 Then
For i = List2.ListCount - 1 To 0 Step -1
If List2.Selected(i) Then
List1.AddItem List2.List(i)
List2.RemoveItem i
End If
Next
End If
End Sub
Завершая обсуждение элемента ListBox, рассмотрим один полезный прием программирования: использование элемента ListBox для хранения списка ключей при организации быстрого поиска в массивах или файлах с произвольным доступом.
Индексирование с помощью элемента ListBox
Ключевым свойством элемента ListBox является свойство ItemData - массив, подобный массиву List. Однако вместо строк, появляющихся в элементе, он содержит числа. Каждый пункт, отображаемый элементом ListBox. состоит из двух частей: строки задаваемой свойством List(i) и числа, задаваемого свойством ItemData(i) (здесь i- индекс пункта списка).
Свойство ItemData - это значение типа Long, которое может сохранять, числовую информацию любого типа, относящуюся к пункту списка, но не отображаемую в списке. Так в массиве List() можно сохранять список имен сотрудников, а в массиве ItemData() данные об их зарплате. Доступ к записям о каждом сотруднике можно получать по имени, а зарплату отображать в элементе TextBox, помещенном на ту же форму.
Однако истинная ценность свойства ItemData состоит не в хранении дополнительной информации, относящейся к пункту. Действительно, единственного числа явно недостаточно для хранения существенной дополнительной информации. Предположим, необходимо поддерживать список имен и адресов. Хранить все эти записи в элементе ListBох непрактично: элемент должен быть слишком широким, чтобы вместить всю строку с именем, адресом, городом, номером телефона и т.д.
Практичнее хранить в элементе ListBox имена, используя их как ключи для доступа к элементам массива, в котором хранится остальная информация. Каждая запись хранится в элементе массива, соответствующем одному из пунктов элемента ListBox. Если установить значение свойства ItemData равным индексу соответствующего элемента массива данных, то при необходимости можно получить немедленный доступ к записям массива.
Этот подход применим и к файлам с произвольным доступом (значение свойства ItemData равно числу совпадающих записей). Такой подход демонстрируется в приложении KeyList.
Проект KeyList
Приложение KeyList (рис. 5.4.4) предназначено для поддержки списка книг, индексированных по значению ISBN. Это приложение, конечно, примитивно и не соответствует требованиям, предъявляемым к базам данных. Для экономии места и времени информация хранится в массиве, а между сеансами сохраняется в файле на диске.
Рис.5.4.4. В приложении KeyList для поддержки индексированной информации используется элемент ListBox
Массив - удобная форма хранения нескольких сотен записей, но их сортировка - дело нелегкое. Вставка каждого пункта в соответствующий элемент массива требует копирования больших объемов данных. Чтобы вставить новый пункт в первый элемент массива, необходимо скопировать все пункты в следующую позицию массива. Поэтому следует, по возможности, избегать сортировки (особенно во время работы).
В приложении KeyList для поддержки отсортированных пунктов списка используется элемент ListBox В принципе, в этом элементе можно сохранить всю информацию (хотя это непрактично). Список следует использовать для хранения ключей, т е ISBN книг. Остальные поля можно сохранить в массиве.
На рис. 5.4.5 показан способ хранения ключей в элементе ListBox, а соответствующих данных - в массиве. Элементы массива ItemData указывают на соответствующие им элементы в массиве данных, который может содержать множество полей.
Рис. 5.4.5. Массив ItemData связывает пункты списка элемента ListBox с элементами массива DataArray или записями файла с произвольным доступом
Единственное, что теперь необходимо, - связать номера ISBN с соответствующей информацией в массиве. В элементе ListBox эта связь обеспечивается с помощью свойства ItemData, представляющего собой массив чисел по одному на каждый пункт списка. Каждый пункт списка имеет значение (отображаемое в списке), к которому можно обратиться с помощью свойства List, и связанное с ним значение, не отображаемое в списке List, но к нему можно получить доступ с помощью свойства ItemData.
Первым элементом в списке является List1.List(0), а связанная с ним информация хранится в четвертом элементе массива. Этот индекс предоставляется свойством List1.ItemData(0) Свойство Sorted списка равно True, поэтому пользователь увидит ключи отсортированными, что позволит ему легко найти любой пункт списка List. Программисту же нет необходимости заботиться о поддержании порядка среди элементов массива, поскок доступ к ним осуществляется с помощью ключей в списке List элемента ListBox. Поэтому можно считать, что массив также отсортирован.
Программа позволяет вводить данные в различные поля. По завершении работы пользователь должен щелкнуть на кнопке ОК для подтверждения изменений (на рис 5.4.4 эта кнопка не видна, поскольку она появляется только во время ввода пользователем новой записи). Новая запись добавляется к массиву DataArray(), объявленному таким образом:
Dim DataArray(999,3) As String
Элемент DataArray(i, 0) хранит ISBN книги, элемент DataArray(i, 1)-список издателей DataArray(i, 2)-список авторов книги, DataArray(i, 3)-названия книг. Параметр i является индексом, хранящимся в свойстве ItemData списка. Ниже приведен код, исполняемый при щелчке на кнопке ОК.
Фрагмент программы. Кнопка ОК
Private Sub OKButton_Click()
Key = Trim(txtISBN.Text)
If Key = "" Then
MsgBox "Key field must be non-mepty"
(Ключевое поле не может быть пустым)
Exit Sub
End If
position = Search(Trim(txtISBN.Text))
If position >=0 Then
reply = MsgBox("Key exists. Replace existing record?", vbYesNo)
(Ключ существует. Заменить существующую запись?)
If reply = vbYes Then
List1.RemoveItem position
Else
txtISBN.SetFocus
Exit Sub
End If
End If
ArrayIndex = ArrayIndex + 1
List1.AddItem Key
List1.ItemData(List1.NewIndex) = ArrayIndex
DataArray(ArrayIndex, 1) = txtPublisher.Text
DataArray(ArrayIndex, 2) = txtAuthor.Text
DataArray(ArrayIndex, 3) = txtTitle.Text
List1.ListIndex = List1.NewIndex
ShowRecord
ShowButtons
End Sub
Программа читает данные, введенные пользователем в различные поля, производит поиск в списке с помощью функции Search() и определяет, существует ли запись с таким ключом. Далее она вставляет ключ в элемент ListBox сохраняет остальные поля в массиве DataArray(). Поскольку свойство Sorted списка List равно True, введенный пункт автоматически вставляется в соответствующую позицию списка. Переменная ArrayIndex является глобальной и указывает на последний элемент массива. При добавлении каждого нового элемента значение переменной ArrayIndex увеличивается на 1. Значение свойства ArraIndex сохраняется в массиве ItemData в позиции, соответствующей новому добавленному элементу. Следующее выражение является индексом нового добавленного в список элемента:
List1.NewIndex
Оно используется в операторе для выборки элемента массива ItemData, соответствующего новому пункту списка.
List1.ItemData(List1.NewIndex) = ArrayIndex
Массив ItemData списка List содержит ключи массива данных, поэтому при наличии ключа ISBN можно легко осуществить выборку названия книги или ее авторов. Каждый раз при щелчке на пункте списка элемента ListBox программа извлекает свойство ItemData этого пункта и использует его в качестве индекса для доступа к полю названия книги в массиве DataArray(). Ниже представлен код, осуществляющий выборку полей записи при выборе нового пункта списка.
Фрагмент программы . Отображение записи
Private Sub List1_MouseUp(Button As Integer,_
Shift As Integer, X As Single, Y As Single)
ShowRecord
End Sub
Sub ShowRecord()
If List1.ListIndex < 0 Then
txtISBN.Text = ""
txtPublisher.Text = ""
txtAuthor.Text = ""
txtTitle.Text = ""
Exit Sub
End If
ItemIndex = List1.ItemData(List1.ListIndex)
txtISBN.Text = List1.List(List1.ListIndex)
txtPublisher.Text = DataArray(ItemIndex, 1)
txtAuthor.Text = DataArray(ItemIndex, 2)
txtTitle.Text = DataArray(ItemIndex, 3)
End Sub
Если в списке не был выбран ни один пункт, то программа очищает содержимое всех полей. При выборе пункта программа отображает поля записи в соответствующих текстовых полях, вызывая для этого подпрограмму ShowRecords(), которая скрывает кнопки ОК и Cancel, а затем отображает кнопки Delete и Add New. Это происходит после добавления пользователем новой записи и щелчка на кнопке ОК. Можно отказаться от ввода новой записи, щелкнув на пункте списка.
Локализация пункта элемента ListBox
Функция Search() предназначена для локализации (определения места) заданного пункта в списке. Элемент ListBox не предоставляет для этого каких-либо специфических методов, но позволяет определить, существует ли указанный пункт в списке, и узнать его индекс (если он существует). Для этого требуется установить свойству Text элемента нужное значение. Свойство Text элемента ListBox можно также установить из кода равным заданному пункту списка, то пункт будет автоматически выбран, и свойство ListIndex установится равным значению его индекса.
Ниже представлен код функции Search().
Фрагмент программы. Функция Search()
Function Search(KeyField) As Integer
List1.Text = KeyField
Search = List1.ListIndex
End Function
Для локализации пункта списка элемента ListBox можно предоставить пользователю элемент TextBox в поле которого можно ввести искомую строку. В событие Change элемента TeхtBoх вставьте код, определяющий вызовом функции Search() местонахождение пункта, ключ которого введен в поле элемента TextBox. Для программирования обработчика события Change элемента TextBox, содержащего ISBN, используйте следующий код.
Фрагмент программи. Обработчик события Change элемента TextBox с кодом ISBN
Private Sub txtISBN_Change()
position = Search(Trim$(txtISBN.Text))
If position > -1 Then
List1.ListIndex = position
ShowRecord
Else
txtPublisher.Text = ""
txtAuthor.Text = ""
txtTitle.Text = ""
End If
End Sub
Пользователь может находить пункт в списке с помощью мыши либо вводя его ключ в поле ISBN. Однако разработанное приложение имеет недостаток - оно не устанавливает частичного совпадения ключей. Другими словами если значение ISBN не имеет точного соответствия с записью в списке, то пункт не будет выбран. Предположим, что ключ равен 1984-2030-3. Тогда для значений ISBN, равных 1984-2030 или 1984-20, не будет найдена соответствующая запись.
Элемент ComboBox подобен ListBox тем, что содержит множество пунктов, доступных для выбора, но при этом занимает на экране меньше места. Реальное отличие между элементами ComboBox и ListBox состоит в том, что элемент ComboBox позволяет пользователю задавать новые пункты, которых нет в списке. В Visual Basic доступны элементы ComboBox трех типов. В таблице 5.5.1. приведены значения свойства Style, задающие тип используемого элемента.
Таблица 5.5.1. Типы элемента ComboBox
Значение |
Описание |
0 |
DropDownCombo (по умолчанию). Поле с раскрывающимся списком. Данный тип элемента управления представляет собой обычное текстовое поле, объединенное с раскрывающимся списком. Пользователь может либо выбрать готовый элемент из списка, либо ввести новый элемент в текстовое поле |
1 |
Simple Combo. Поле с обычным списком. В этом типе элемента управления информация отображается в обычном (не раскрывающемся) списке. Как и в предыдущем случае, пользователь может выбрать готовый элемент из списка либо ввести новый элемент в текстовое поле. |
2 |
DropDownList. Раскрывающийся список. Пользователь может выбрать лишь то, что представлено в списке и не может ввести новый элемент в поле. |
Работа с полями со списками ничем не отличается от работы с обычными списками. Для изменения содержимого списка используются методы AddItem, RemoveItem и Clear. Элементы списка могут быть, как отсортированы, так и нет. У полей со списками также предусмотрены свойства ItemData и NewIndex. Единственное отличие описываемых списков наличие текстового поля для ввода информации. Единственным недостатком полей со списками является то, что они не поддерживают выбор нескольких элементов.
Установка начального значения
Элемент, который должен быть выделен в списке по умолчанию, устанавливается с помощью свойства ListIndex. Предположим, что нужная вам фамилия расположена в представленном на экране списке третьим, и вы хотите, чтобы при открытии формы эта фамилия была выделена по умолчанию. Тогда воспользуйтесь приведенным ниже оператором :
Пример 1:
Combo1.ListIndex=2
Пример 2. Фрагмент программы позволяет ненулевое числовое значение, введенное в текстовую строку ComboBox, поместить в список после нажатия кнопки Соmmand1. Если условие ввода не выполняются, то выдаются соответствующие сообщения. Кроме того, при вводе не допускается повторение элементов в списке.
Private Sub Form_Load()
For i = 1 To 10
Combo1.AddItem i * 100
Next
End Sub
Private Sub Command1_Click()
If Not IsNumeric(Combo1.Text) Then
MsgBox "Элемент не является числом"
Combo1.Text = ""
Combo1.SetFocus
Exit Sub
End If
For i = 1 To Combo1.ListCount
If (Combo1.Text = Combo1.List(i - 1)) Then
MsgBox "Элемент имеется в списке"
Combo1.SetFocus
Exit Sub
End If
Next
Combo1.AddItem Combo1.Text
End Sub
Приведенный способ может быть использован для малых списков. В противном случае целесообразно использовать более эффективные способы поиска, например, половинного деления.
Принцип работы полос прокрутки чем-то напоминает ползунок регулятора громкости стереосистемы. Они используются для установки параметра, значение которого может меняться в некотором диапазоне от минимума до максимума. С точки зрения программирования, описываемый элемент управления возвращает числовое значение, которое зависит от положения бегунка, а также от выбранного программистом диапазона чисел.
В Visual Basic предусмотрено два типа полос прокрутки: вертикальная и горизонтальная. В документации они называются как элементы управления типа VscrollBar и HScrollBar соответственно. В рассматриваемых ниже примерах мы пользуемся горизонтальной полосой прокрутки, хотя вся информация относится также и к вертикальной полосе прокрутки. Эти два элемента абсолютно равноправны.
Создание полосы прокрутки
Перед началом работы необходимо определить диапазон вводимых чисел, установив значения свойств Min и Max. Дальнейшая работа с описываемым элементом управления заключается в чтении и установке свойства Value. Значения этих свойств целые числа, т.е. диапазон их изменений, составляет от 32768 до +32767.
Изменение величины перемещения
Текущее положение бегунка полосы прокрутки хранится в ее свойстве Value. Значение этого свойства будет изменяться всякий раз при перетаскивании бегунка либо после щелчка на одной из стрелок полосы прокрутки.
При изменении значения свойства Value автоматически возникает событие Change. Следующий фрагмент программы позволяет выводить в текстовом окне Text3 цифровое значение бегунка на полосе прокрутки.
Private Sub VSc1_Change()
Text3.Text = VSc1.Value
End Sub
Величина изменения свойства Value после щелчка на одной из стрелок полосы прокрутки зависит от значения свойства SmallChange. Свойству SmallChange нужно присвоить небольшое значение, чтобы получить плавное перемещение бегунка. По умолчанию ему присвоено значение 1.
Если щелкнуть на свободной части полосы прокрутки (между ползунком и одной из стрелок), значения свойства Value изменится на большую величину, чем после щелчка на одной из стрелок. Оно определяется значением свойства LargeChange. Обычно значение свойства LargeChange составляет 5-10% диапазона изменения свойства Value. Например, при значении Min =0 и Max = 100, целесообразно установить LargeChange=10.
Пример 6.1.1. Изменяя значения полосы прокрутки необходимо отражать текущее значение в текстовом поле.
Private Sub Form_Load()
HScroll1.Min = 0
HScroll1.Max = 100
HScroll1.LargeChange = 10
HScroll1.SmallChange = 1
HScroll1.Value = 50
Text1.Alignment = 2
Text1.FontSize = 20
End Sub
Private Sub HScroll1_Change()
Text1.Text = HScroll1.Value & " км/час"
End Sub
Отображение значения свойства Value на экране
Полосу прокрутки можно использовать для выбора одной из букв алфавита, определяющей критерий поиска в базе данных. Чтобы значение свойства Value отображалось на экране, необходимо обработать три события:
Пример 6.1.2. Изменяя значения полосы прокрутки необходимо отражать текущее значение в текстовом поле
Private Sub Form_Load()
'Установим числовые значения свойств Max и Min
HScroll1.Max = Asc("Я")
HScroll1.Min = Asc("А")
'Установим начальное значение др. свойств
HScroll1.LargeChange = 20
HScroll1.SmallChange = 1
HScroll1.Value=Asc(“O”)
End Sub
Private Sub HScroll1_Change()
Label1.Caption = "Поиск " & Chr$(HScroll1.Value)
` Здесь помещается код для поиска значения в базе данных
End Sub
Private Sub HScroll1_Scroll()
Label1.Caption = Chr$(Hscroll1.Value)
End Sub
Пример 6.1.3. На форме имеется три вертикальных полосы прокрутки и элемент управления Label. Каждый из бегунков позволяют регулировать насыщенность трех цветов: красного (R), зеленого (G), синего (B). Перемещая бегунки на полосах прокрутки необходимо отражать в Label получившийся смешанный цвет.
Private Sub Form_Load()
For i = 0 To 2
VScroll1(i).Min = 0
VScroll1(i).Max = 255
VScroll1(i).LargeChange = 30
VScroll1(i).SmallChange = 5
VScroll1(i).Value = 256/2
Label3(i) = 256 / 2
Next
End Sub
Private Sub VScroll1_Change(Index As Integer)
Label1.BackColor = RGB(VScroll1(0).Value, _
VScroll1(1).Value, VScroll1(2).Value)
For i = 0 To 2
Label3(i) = VScroll1(i).Value
Next
End Sub
Private Sub VScroll1_Scroll(Index As Integer)
Label1.BackColor = RGB(VScroll1(0).Value, _
VScroll1(1).Value, VScroll1(2).Value)
For i = 0 To 2
Label3(i) = VScroll1(i).Value
Next
End Sub
Элемент управления типа Timer предназначен для отсчета небольших промежутков времени (не более 1 минуты).
В прикладных программах таймер используется для различных целей, как, например, выполнение определенного действия через заданный интервал времени.
Работа с таймером
Таймер в режиме разработки программы всегда отображается в форме в виде пиктограммы, но при выполнении он становится «невидимым». Чтобы запустить в программе таймер, вначале нужно написать текст процедуры обработки события Timer, а затем установить значения некоторых свойств. Основные свойства:
Свойство Enabled запускает и останавливает таймер. Если его значение равно True, то по истечении интервала времени будет вызываться процедура обработки события Timer. Значения Interval находятся в диапазоне от 0 до 65535. Если данному свойству присвоить значение 0, элемент управления типа Timer перейдет в неактивное состояние.
Максимальный интервал времени, который позволяет установить таймер, примерно равен одной минуте (65535 мсек). Ниже приведен текст процедуры, которая позволяет расширить диапазон времени.
Пример 6.2.1, позволяющий искусственно изменить интервал до 5 минут. В данном примере каждые 5 минут будет выведено на экран диалоговое окно «Привет». Отсчет времени начинается после загрузки программы либо после нажатия кнопки ОК диалогового окна. В примере используется функция Timer, определяющая количество секунд после полночи.
Dim a As Long
Private Sub Form_Load()
Dim b As Long
a = (Timer + 5 * 60) Mod (3600& * 24)
Timer1.Interval = 10
End Sub
Private Sub Timer1_Timer()
If Timer > a Then
Timer1.Enabled = False
MsgBox "Привет"
Timer1.Enabled = True
a = (Timer + 5 * 60) Mod (3600& * 24)
End If
End Sub
Элемент управления Frame можно особо выделить среди всех внутренних компонентов Visual Basic, он предназначен для помещения в него других элементов управления и служит контейнером для других элементов управления. Основные свойства Frame приведены в таблице 6.3.1.
Таблица 6.3.1. Свойства элемента управления Frame,влияющие на его внешний вид:
Свойство |
Описание |
Caption |
Данное свойство используется для идентификации содержимого группы или отображения другой информации. |
Appearance |
Значение этого свойства определяет, будет ли группа обведена одинарной одноцветной рамкой, что придаст ей плоский вид (Flat Border), либо внешний вид рамки придаст группе объемный вид (3-D Border). |
BorderStyle |
Данное свойство определяет, будет ли вокруг группы обведена рамка или нет. Если установить его значение равным 0 None, рамка и заголовок группы (поскольку он является частью рамки) будут отсутствовать. |
Visible |
Установка значения свойства в False приведет к тому, что сам контейнер и входящие в него объекты исчезнут с экрана. |
Рис. 6.3.1.Внешний вид элемента Frame.
На внешний вид группы влияют значения свойств Appearance, BorderStyle и Caption. (см. рис. 6.3.1.)
На рис. 6.3.2. показаны 2 группы (контейнера) в которых помещены радиокнопки, их функционирование выполняется раздельно. Первым контейнером является собственно форма, вторым вставленный элемент Frame.
Рис. 6.3.2. Пример проектирования Frame.
При работе с рамками не нужно забывать о следующих правилах:
При перетаскивании элемента управления из формы в группу визуально будет казаться, что данный элемент принадлежит группе. Но на самом деле это не так. Есть только один способ, с помощью которого можно переместить элемент управления из формы в группу вырезать его из формы, выбрать нужную группу, а затем вставить его в эту группу.
На заметку. Чтобы проверить, является ли данный элемент управления членом группы, попробуйте несколько переместить саму группу. Если вместе с группой переместится и элемент управления, значит, он входит в группу. В противном случае, последовательно выполните операции Вырезать и Вставить.
Массив элементов управления представляет собой группу элементов управления одного типа, имеющих одно и то же имя и различные индексы.
Элемент управления в массиве должен удовлетворять следующим критериям:
Преимущества массивов элементов управления
Использование массивов вместо группы индивидуальных элементов управления имеет несколько преимуществ при разработке интерфейса программы и манипулировании элементами управления из программного кода. Некоторые из них:
Создание массива элементов управления
Массивы элементов управления создаются во время разработки программы. Хотя элементы управления могут добавляться в эти массивы и во время выполнения, тем не менее первый элемент должен быть создан еще на этапе разработки.
Массивы элементов управления можно создается в основном двумя способами:
Написание кода для массива элементов управления
Создав массив элементов управления, можно написать единый фрагмент кода для обработки событий, связанных со всеми элементами массива.
Фрагмент программы обработки событий нескольких элементов TextBox, объединенные в массив:
Private Sub Txt1_Change(Index As Integer)
End Sub
Пример 1. При загрузке формы производится заполнение текстовых окон массива, состоящего из 5 элементов. При каждом нажатии на кнопку Сmd1 производится увеличение существующего значения на величину 10.
Private Sub Form_Load()
Dim i As Integer
For i = 0 To 4
Text1(i) = 10 * i
Next
End Sub
Private Sub Cmd1_Click()
Dim i As Integer
For i = 0 To 4
Text1(i) = Text1(i) + 10
Next
End Sub
Графические изображения можно поместить в один из следующих элементов управления:
Основное различие между этими элементами состоит в том, что элемент ImageBox спроектирован для отображения рисунков, а не для их создания или управления ими. В остальных двух элементах предусмотрены методы рисования, позволяющие во время работы приложения создавать графические изображения.
Элемент ImageBox (Изображение)
Элемент ImageBox (Изображение) удобен для отображения рисунков и требует меньше ресурсов, чем элемент PictureBox. Если значение свойства Stretch установлено равным True, то размер изображения изменяется так, чтобы оно заполнило всю поверхность. При различном соотношении размеров элемента и изображения последнее искажается. Если же значение свойства Stretch установить равным False, то элемент ImageBox ведет себя подобно элементу PictureBox, у которого значение свойства AutoSize установлено в True. На рис. 8.1 показаны два элемента ImageBox, в которые помещено одинаковое изображение, изменяющее размер в зависимости от установленных значений свойства Stretch.
Рис. 8.1. Установка свойства Stretch элемента ImageBox.
Элемент PictureBox
Если значение свойства AutoSize элемента установлено равным True, размеры элемента изменяются в соответствии с размерами вставленного в него изображения. Если же значение свойства AutoSize False, отбражается только та часть изображения, которая помещается в элемент.
Для загрузки изображения в элемент во время выполнения приложения используется метод LoadPicture:
Form1.Picture = LoadPicture («имя файла»)
Перечислим возможные расширения этого имени:
BMP растровый рисунок;
GIF формат обмена графическими данными;
JPG объединенная экспертная группа по фотографии;
DIB аппаратно-независимый растровый рисунок;
WMF метафайл Windows;
EMF усовершенствованный матафайл;
ICO значок.
Если использовать метод LoadPicture без аргументов, то текущее изображение будет выгружено из элемента вместе с остальными рисунками и текстом, введенными в элемент или форму командами Circle, Line, PSet или Print.
Picture1.Picture = LoadPicture()
При обработке изображения во время работы приложения его сохраняют с помощью оператора SavePicture. Синтаксис этого оператора:
SavePicture Picture, «имя файла»
Следующий оператор сохраняет в файле содержимое элемента Picture1:
SavePicture Picture, «c:\tmpImage.bmp»
Использование объекта Picture для вывода текста и графических элементов
Объект Picture можно использовать в качестве графического окна, в которое выводится текст и графические элементы.
Для вывода в графическое окно текста предназначен метод Print. Программное размещение графических элементов осуществляется с использованием методов Circle (Окружность), Line (Линия), Point (Точка), Pset (Набор точек). Метод PaintPicture позволяет создавать в графическом окне анимацию.
Линии и контуры
Visual Basic позволяет размещать в форме линии, прямоугольники, скругленные прямоугольники, круги, эллипсы, используемые для объединения в группу схожих по смыслу объектов и улучшения внешнего вида формы.
Для добавления в форму линии используется кнопка Line (Линия) на панели элементов управления. Свойство BorderWidth (Ширина границы) позволяет задать толщину линии. Для изменения толщины, заданной по умолчанию, введите в правый столбец свойства число, которое будет определять толщину линии.
Для изменения размеров линии и ее положения можно использовать мышь и клавиатуру аналогично тому, как это делается для всех элементов управления в форме. Помимо этого, можно использовать свойства X1, X2, Y1 и Y2, позволяющие изменять перечисленные параметры программно. Свойства X1 и Y1 определяют, соответственно, горизонтальное и вертикальное положение левого края линии, а свойства X2 и Y2 правого края.
Чтобы задать цвет линии, используйте свойство BorderColor (Цвет границы).
С помощью свойства BorderStyle (Стиль границы) можно указать стиль линии, используя значения, указанные в таблице:
Значение |
Стиль линии |
0 Transparent |
Линия отсутствует (имеет цвет фона) |
1 - Solid |
Тонкая линия |
2 - Dash |
Штриховая линия |
3 - Dot |
Пунктирная линия |
4 - Dash-Dot |
Штрихпунктирная линия |
5 - Dash-Dot-Dot |
Штрихпунктир с двойным штрихом |
6 - Inside Solid |
Непрерывная линия |
Для добавления в форму контура предназначена кнопка Shape (Контур) на панели элементов управления. Она позволяет создавать в форме прямоугольник, квадрат, овал, окружность, прямоугольник и квадрат со скругленными углами. Для придания созданному объекту требуемой формы, установите одно из следующих свойств Shape, представленных в таблице:
Значение свойства |
Контур |
0 - Rectangle |
Прямоугольник |
1 - Square |
Квадрат |
2 - Oval |
Овал |
3 - Circle |
Окружность |
4 - Rounded Rectangle |
Прямоугольник со скругленными углами |
5 - Rounded Square |
Квадрат со скругленными углами |
На рисунке приведены стандартные контуры, создаваемые в Visual Basic.
Используя свойство BackStyle, укажите, будет ли созданный объект прозрачным.
С помощью свойства FillStyle можно задать узор заполнения, используя следующие значения:
Значение |
Узор заполнения |
0 - Solid |
Сплошное заполнение |
1 - Transparent |
Нет заполнения |
2 - Horizontal Line |
Горизонтальная штриховка |
3 - Vertical Line |
Вертикальная штриховка |
4 - Upward Diagonal |
Штриховка по диагонали слева направо |
5 - Downward Diagonal |
Штриховка по диагонали справа налево |
6 - Cross |
Горизонтально-вертикальная штриховка |
7 - Diagonal Cross |
Штриховка по диагонали в обоих направлениях |
Свойство FillColor позволяет задать цвет узора заполнения объекта, а свойство BackColor - цвет фона.
Свойство BorderStyle предназначено для задания стиля рамки объекта. Оно содержит те же значения, что и для линии.
Для придания контуру объемности используйте свойство SpecialEffect.
На панели элементов управления имеются три элемента, позволяющие получать доступ к файловой системе компьютера: DriveListBox (Диски), DirListBox (Каталоги), FileListBox (Файлы). (рис. 9.1). Они являются базовыми блоками, применяемыми при построении диалоговых окон, отображающих файловую систему компьютера. Чтобы найти любую папку или файл на любом жестком диске, в том числе и сетевом, можно перемещаться по файловой системе, используя эти элементы. Элементы не связаны друг с другом и могут применяться отдельно, но практикуется это редко.
Рис. 9.1. Три элемента управления файловой системой
DriveListBox. Отображает имена дисков как встроенных, так и подсоединенных к компьютеру. Основное свойство элемента Drive служит для установки диска, который выбирается при загрузке элемента управления, или возврата выбранного пользователем диска.
DirListBox. Отображает папки текущего диска. Основное свойство элемента - Path имя папки, вложенные папки (подпапки) которой отображаются элементом.
FileListBox. Отображает файлы текущей папки. Основное свойство элемента также называют Path это путь к папке, в которой находятся отображаемые файлы.
Три элемента управления файловой системой не связаны друг с другом. Чтобы соединить эти элементы, необходимо назначить соответствующие значения их основным свойствам. Ниже приведен минимальный программный код, который необходимо включить в событие Change элемента DriveListBox.
Private Sub Drive1_Change()
Dir1.Path = Drive1.Drive
End Sub
При каждом изменении текущей выборки элемента DirListBox необходимо установить свойство Path элемента FileListBox равным новому пути элемента DirListBox.
Private Sub Dir1_Change()
File1.Path = Dir1.Path
End Sub
Этого достаточно для соединения трех элементов управления файловой системой и создания формы, позволяющей просматривать все диски компьютера. Следует учесть, что хотя элемент DriveListBox отображает все диски, а элемент DirListBox - все подпапки, в большинстве случаев следует ограничивать число файлов, отображаемых элементом FileListBox . Для этого используют свойство Pattern (Шаблон) элемента, позволяющее указать в специальной строке шаблон для имен файлов, скажем «*.TXT».
В особом поле со списком (элемент ComboBox) принято отображать список доступных для отображения типов файлов. Пользователь может выбрать нужный ему тип. На рис. 9.1 показано поле со списком, заполненное при загрузке формы. Выбор, сделанный в нем, можно изменять. При этом свойству Pattern элемента управления файлами присваивается новый шаблон файлов.
Изменения в элементе ComboBox передаются приложению с помощью двух событий: Change (пользователь вводит новый шаблон имен файлов) и Click (выбирает шаблон щелчком на пункте списка). Оба события используют следующую строку программного кода:
File1.Pattern = Combo1.Text
Чтобы получить доступ к содержимому трех элементов управления файловой системой, воспользуйтесь свойством List, подобным свойству List элемента ListBox. Чтобы получить доступ к содержимому этих элементов, используйте соответствующее значение Index свойства List. Последнее равно 0 для первого пункта и ListCount-1 для последнего.
Пример. Проект FileDemo показывает получение доступа к содержимому элементов управления файлами.
Private Sub Command1_Click()
' Scan the contents of the DriveListBox control
List1.Clear
List1.AddItem "Вывод всех дисков"
For i = 0 To Drive1.ListCount - 1
List1.AddItem Drive1.List(i)
Next
End Sub
Private Sub Command2_Click()
' Scan the contents of the DirListBox control
List1.Clear
List1.AddItem "Вывод всех подпапок"
For i = 0 To Dir1.ListCount - 1
List1.AddItem Dir1.List(i)
Next
End Sub
Private Sub Command3_Click()
List1.Clear
List1.AddItem "Вывод корневых папок"
pDepth = -1
While Dir1.List(pDepth) <> ""
List1.AddItem Dir1.List(pDepth)
pDepth = pDepth - 1
Wend
List1.AddItem "The current folder is nested " & -pDepth + 1 & " folders deep"
End Sub
Private Sub Command4_Click()
' Scan the contents of the FileListBox control
List1.Clear
List1.AddItem "Вывод всех файлов"
For i = 0 To File1.ListCount - 1
List1.AddItem File1.List(i)
Next
End Sub
48
WordWrap - False
AutoSize - False
На данном примере
WordWrap - False
AutoSize - True
На данном примере показано действие свойств элемента управления Label
MultiLine = True
ScrollBar =0 (Нет)
MultiLine = False
MultiLine = True
ScrollBar =1 (Горизонталь)
MultiLine = True
ScrollBar =2 (Вертикаль)
MultiLine = True
ScrollBar =3 (Оба)
Выбранный элемент
Полоса прокрутки
Список элементов
С заголовком
Без заголовка
Объемная
Плоская
Без рамки
Объемная
WordWrap - True
AutoSize - True
WordWrap - True
AutoSize - False
На данном примере
На данном примере показано действие свойств элемента управления Label
Top
Left
Height
Width
Drive1
Dir1
File1
Cmd2
md1
Cmd3
Txt1
Txt1
Txt2
Txt3
Cmd1
Массив DataArray
Элемент ListBox
Field 3
Field 2
Field 1
Index
Data
List
Style=Standard
Sorted=False
Style=Checkbox
Sorted=True