У вас вопросы?
У нас ответы:) SamZan.net

Стандартные элементы управления Visul Bsic для студентов всех специальностей

Работа добавлена на сайт samzan.net: 2016-03-13

Поможем написать учебную работу

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

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

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 4.4.2025

Министерство образования и науки Украины

Киевский национальный экономический университет

Криворожский экономический институт

Кафедра информатики

Методические указания

для самостоятельного изучения темы:

«Стандартные элементы управления 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

 

1. Понятие о стандартных элементах управления

Элементы управления представляют собой небольшие программы, которые выполняют определенные функции. В поставку 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

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

2. Основные свойства элементов управления

Свойства определяют внешний вид и функционирование элемента управления. Например, если требуется установить новую надпись, то следует изменить свойство 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

Цвет фона устанавливается с помощью свойства 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

Свойство Enabled определяет, будет ли элемент управления реагировать на событие или нет. Если значение свойств равно False, элемент управления будет недоступен и пользователь не сможет его использовать. Обычно при этом элемент подсвечивается серым цветом («заморожен»), так же, как элементы меню, которые нельзя выбрать.

Свойство Visible

Свойство Visible позволяет сделать элемент управления невидимым. Если его значение равно False, то он не виден. Если вы выбираете свойство Enabled, это означает, что элемент управления есть, но обратиться к нему пока невозможно. А свойство Visible позволяет "скрыть" элемент от пользователя.

Пример.

Private Sub Cmdl_Click()

Cmdl.Enabled=False

End Sub

Private Sub Cmd2_Click()

Cmd2.Visible=False

End Sub

Свойство Name

Свойство Name играет особую роль. Ошибки при его задании часто приводят к серьезным последствиям. Имя является идентификатором элемента управления. Если в приведенном примере изменить имя второй кнопки, то код больше не будет выполняться, так как элемента с именем Cmd2 не существует.

Внешний вид

Большинство элементов управления имеет свойство Appearance, отвечающее за отображение элемента управления (без визуальных эффектов или в трехмерном виде).

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

3. Основные события Windows

События щелчка мыши:

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

Событие DblClick вызывается двойным щелчком кнопкой мыши на элементе управления. Временной интервал между двумя щелчками двойного щелчка устанавливается в панели управления Windows.

Событие MouseDown вызывается при нажатии кнопки мыши. При этом процедуре обработки события передается несколько параметров.

Событие MouseUp вызывается при отпускании кнопки мыши.

Событие MouseMove вызывается, когда пользователь передвигает курсор мыши.

События клавиатуры:

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

События KeyDown, KeyUp вызываются при нажатии (KeyDown) или отпускании (KeyUp) клавиши. Они происходят даже при нажатии специальных клавиш управления, например функциональных клавиш.

Фокус—это одно из важных понятий при обращении к элементам управления в Windows. Система Windows решает, какому приложению передавать нажатие клавиши — управление получает активный элемент, т.е. элемент, имеющий фокус. Visual Basic позволяет обрабатывать два события, связанных с передачей фокуса: LostFocus и GotFocus. Если перейти от одного элемента управления к другому, то для предыдущего элемента вызывается событие LostFocus, а для нового — GotFocus.

4. Работа с текстом

4.1. Отображение текста в полях типа Label

Основным назначением элементов управления типа 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.

4.2. Ввод текста в текстовые поля (TextBox)

  С помощью текстовых окон производят ввод, обработку и отображение текста на экране. Содержимое данного элемента управления хранится в свойстве 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. Элементы управления для принятия решения

Существует тип вопросов, на которые заранее можно дать однозначный ответ «Да/Нет» или «Женат/Холост», т.е. заранее можно предложить небольшой список готовых ответов. В таблице 5.1 перечислены основные элементы для принятия решения и дано их краткое описание.

Таблица 5.1.Элементы управления, предназначенные для принятия решения

CommandButton

Кнопка

Служит для инициирования некоторых действий программы после щелчка на ней кнопкой мыши.

CheckBox

Флажок

Служит для установки и отображения логических (типа Да/Нет) параметров программы.

OptionButton

Переключатель

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

ComboBox

Поле со списком

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

ListBox

Список

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

5.1. Кнопка (Элемент CommandButton)

Элемент 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

5.2. Флажок (элемент Check Boxes)

Флажки используются для отображения логических данных, т.е. данных, которые могут принимать только два значения – 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

5.3. Переключатель (элемент Option Button)

Иногда их называют радиокнопками, поскольку их функции очень похожи на кнопки переключения диапазонов в автомобильных радиоприемниках. Переключатели всегда должны находиться в группах, причем только один из переключателей группы может быть активизирован («нажат»). В исходном состоянии переключатель находится в выключенном состоянии, т.к. свойство 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

5.4. Список (Элемент ListBox)

 ListBox используются для наглядного представления информации и возможности выбора как одного, так и нескольких его элементов При помещении элемента управления  ListBox в форму на экране отображается пустой прямоугольник, внутри которого будет находиться текст «List (стандартное имя списка, назначенное 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, не будет найдена соответствующая запись.

5.5. Поле со списком (элемент ComboBox)

Элемент 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

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

6. Элементы управления специального назначения

  •  Полосы прокрутки (элементы типа VscrollBar и HScrollBar);
  •  Таймер (элемент типа Timer);
  •  Рамка (элемент типа Frame).

6.1. Полосы прокрутки (VscrollBar и HscrollBar)

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

В 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 отображалось на экране, необходимо обработать три события:

  •  Form_Load. Это событие используется для отображения начального значения свойства Value после назначения диапазона изменения этого свойства.
  •  Change. Данное событие происходит в момент отпускания кнопки мыши после перетаскивания бегунка в новое положение, после щелчка мышью на одной из стрелок или на пустой области полосы прокрутки.
  •  Scroll. Это событие возникает после перемещения бегунка полосы прокрутки. Оно позволяет отобразить на экране значение свойства 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

6.2. Таймер (элемент управления Timer)

Элемент управления типа Timer предназначен для отсчета небольших промежутков времени (не более 1 минуты).

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

Работа с таймером

Таймер в режиме разработки программы всегда отображается в форме в виде пиктограммы, но при выполнении он становится «невидимым». Чтобы запустить в программе таймер, вначале нужно написать текст процедуры обработки события Timer, а затем установить значения некоторых свойств. Основные свойства:

  1.  Interval;
  2.  Enabled.

Свойство 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

6.3. Рамка (элемент Frame)

Элемент управления 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.

При работе с рамками не нужно забывать о следующих правилах:

  •  Если в форме уже есть некоторые элементы управления, то они не будут включены в группу, даже если вы поместите поверх них элемент управления типа Frame.
  •  Нельзя включить элемент управления в группу, перетащив его из формы во внутреннюю область элемента управления типа Frame. Точно также, нельзя исключить элемент управления из группы, перетащив его из внутренней области элемента управления типа Frame в форму.

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

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

7. Массив элементов управления

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

Элемент управления в массиве должен удовлетворять следующим критериям:

  •  Все элементы массива должны быть одного типа (например, текстовое поле или надпись).
  •  Все элементы должны иметь одно и то же значения свойства Name.
  •  Все элементы идентифицируются уникальным значением свойства Index.

Преимущества массивов элементов управления

Использование массивов вместо группы индивидуальных элементов управления имеет несколько преимуществ при разработке интерфейса программы и манипулировании элементами управления из программного кода. Некоторые из них:

  •  Добавление нового элемента в массив требует меньших системных ресурсов, чем добавление индивидуального элемента управления. Например, три независимых текстовых поля (Text1, Text2 и Text3) потребляют больше ресурсов, чем трехэлементный массив того же типа.
  •  Элементы массива элементов управления совместно используют одни и те же обработчики событий. Другими словами, одна процедура обработки событий используется для всех элементов массива.
  •  При выполнении программы в форму можно поместить новый элемент управления только одним способом — добавить его в массив элементов управления.

Создание массива элементов управления

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

Массивы элементов управления можно создается в основном двумя способами:

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

Написание кода для массива элементов управления

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

Фрагмент программы обработки событий нескольких элементов 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

8. Использование графики

Графические изображения можно поместить в один из следующих элементов управления:

  •  форму;
  •  элемент PictureBox;
  •  элемент  ImageBox.

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

Элемент ImageBox (Изображение)

Элемент ImageBox (Изображение) удобен для отображения рисунков и требует меньше ресурсов, чем элемент PictureBox. Если значение свойства Stretch установлено равным True, то размер изображения изменяется так, чтобы оно заполнило всю поверхность. При различном соотношении размеров элемента и изображения последнее искажается. Если же значение свойства Stretch установить равным False, то элемент ImageBox  ведет себя подобно элементу PictureBox, у которого значение свойства AutoSize установлено в True. На рис. 8.1 показаны два элемента ImageBox, в которые помещено одинаковое изображение, изменяющее размер в зависимости от установленных значений свойства Stretch.

Рис. 8.1. Установка свойства Stretch элемента ImageBox.

Элемент PictureBox 

Если значение свойства AutoSize элемента установлено равным True, размеры элемента изменяются в соответствии с размерами вставленного в него изображения. Если же значение свойства AutoSizeFalse, отбражается только та часть изображения, которая помещается в элемент.

Для загрузки изображения в элемент во время выполнения приложения используется метод 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.

9. Элементы управления файлами

На панели элементов управления имеются три элемента, позволяющие получать доступ к файловой системе компьютера: 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


Литература

  1.  Боб Реселман. Использование Microsoft Visual Basic 5. Ясно. Кратко. Надежно. Киев. Москва. Санкт-Петербург. 1998.
  2.  Брайан Сайлер и Джефф Споттс. Использование Visual Basic 6. Специальное издание. Издательский дом «Вильямс». Москва. Санкт-Петербург. Киев. 2000.
  3.  Брайан С. Visual Basic 6. 19 уроков для освоения языка. Санкт-Петербург. 2002.
  4.  Грэг Перри, Санжайа Хеттихева. Освой самостоятельно Visual Basic 6 за 24 часа. М. ЗАО «Издательство БИНОМ». 1999.
  5.  Евангелос Петрусос. Visual Basic 6. Руководство разработчика. К. «Ирина», BHV. 2000.

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

Item

Data

List

- - -

- - -

- - -

- - -

- - -

- - -

- - -

- - -

- - - - - - -

- - - - - - -

- - - - - - -

- - - - - - -

- - - - - - -

- - - - - - -

- - - - - - -

- - - - - - -

- - -

- - -

- - -

- - -

- - -

- - -

- - -

- - -

8

7

6

5

4

3

2

1

1

8

3

6

7

5

2

4

Key8

Key7

Key6

Key5

Key4

Key3

Key2

Key1

Style=Standard

Sorted=False

Style=Checkbox

Sorted=True

  1.  



1. экология- В Э
2. тема производства силикатного кирпича
3. за выброс в атмосферу 1 т загрязняющих вредных веществ Загрязняющее вещество ПДВ ВСВ
4. Механизмы межпроцессных взаимодействий в операционной системе Unix
5. Реферат на тему- Воля
6. О Центральном банке Российской Федерации Банке России
7. Статья- Современное состояние вопроса о типах высшей нервной деятельности человека и методика их определения
8. Badlands
9.  Философия как разновидность мировоззрения 12
10. 5 Левое ~ 3 Правое ~ 1 2