30
«ИНФОРМАТИКА И КОМПЬЮТЕРНАЯ ТЕХНИКА» КАФЕДРА ЭКОНОМИЧЕСКОЙ КИБЕРНЕТИКИ Стандартные элементы управления Лекция 9

Лекция 9.Стандартные элементы управления

Embed Size (px)

DESCRIPTION

VB lection in Russian

Citation preview

Page 1: Лекция 9.Стандартные элементы управления

«ИНФОРМАТИКА И КОМПЬЮТЕРНАЯ

ТЕХНИКА»КАФЕДРА ЭКОНОМИЧЕСКОЙ

КИБЕРНЕТИКИ

Стандартные элементы управления

Лекция

9

Page 2: Лекция 9.Стандартные элементы управления

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

Название Назначение Описание

Label Надпись Служит для отображения текста, который пользователь не может изменить

TextBox Текстовое поле

Служит для отображения, ввода и редактирования текста

CommandBut-ton

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

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

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

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

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

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

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

Timer Таймер Позволяет программам выполнять различные действия с таймером

Image Рисунок Служет для отображения рисунка в форме

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

PictureBox Графический фрейм

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

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

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

1

Page 3: Лекция 9.Стандартные элементы управления

И хотя пользователь не может изменить текст, находящийся в полях типа Label, тем не менее, с точки зрения программиста, они являются полноценными элементами управления, поскольку для них предусмотрен определенный набор свойств и событий. Все это позволяет прямо из программы управлять внешним видом и содержимым полей типа Label. Чтобы поэкспериментировать с ними, создайте новый стандартный проект Visual Basic и поместите в форму элемент управления типа Label. Дважды щелкните на нем и введите в окно кода текст приведенной ниже процедуры обработки события Click.

Private Sub Label1_Click() Label1.Caption = "Current time: " & Time$End SubКаждый раз, как только вы щелкнете мышью на элементе управления

типа Label, в нем появится текущее время.Размер текста, который можно поместить в элемент управления типа

Label практически не имеет ограничений. Мы говорим '"практически", поскольку максимальный размер текста, находящегося в поле типа Label не должен превышать 65528 символов. Таким образом, в полях данного типа можно отображать несколько строк и даже абзацев текста. Единственное условие — при отображении длинных фрагментов текста нужно соответствующим образом установить значения свойств AutoSize и Word-wrap.Свойство AutoSize

Для отображения текста в поле типа Label явно не достаточно просто поместить его в свойство Caption. Нужно еще позаботиться, чтобы размер элемента управления был достаточен для отображения на экране нужного фрагмента текста. Подобные проблемы чаще всего возникают, когда размер отображаемого на экране текста заранее не известен. Например, так происходит, когда в одном и том же поле последовательно отображаются результаты выполнения разных запросов в базу данных. Поэтому логично, чтобы размер элемента управления автоматически подстраивался под его содержимое. Для этого и предусмотрено свойство AutoSize. Когда его значение установлено в False (принято по умолчанию), размер поля не зависит от значения свойства Caption и все время остается постоянным. Если размер элемента управления не достаточен для отображения всего содержащегося в нем текста, часть текста, выходящая за границы поля, просто не будет видна на экране. Если значение свойства AutoSize равно True, размеры элемента управления будут автоматически подстраиваться под длину текста, содержащегося в свойстве Caption.Свойство WordWrap

От значения свойства WordWrap зависит способ изменения размеров элемента управления типа Labеl. Если значение описываемого свойства установлено в False (принято по умолчанию), размеры элемента управления будут увеличиваться только в горизонтальном направлении, пока весь текст не будет виден на экране. Очевидно, что при больших объемах текста, правая граница поля может выйти за границы формы. В случае, если значение свойства WordWrap равно True, размеры элемента управления будут увеличиваться в вертикальном направлении вниз так, чтобы на экране был виден весь текст. При этом будет происходить автоматический перенос

2

Page 4: Лекция 9.Стандартные элементы управления

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

Рис. Демонстрация работы свойств AutoSize и Wordwrap

Внимание!Чтобы сохранить первоначальную ширину элемента управления, вначале нужно установить значение

свойства Wordwrap равным True, после чего присвоить свойству AutoSize значение True. Если поступить наоборот, т.е. сначала установить значение свойства AutoSize равным True, когда значение свойства wordwrap равно False, элемент управления автоматически расширится по горизонтали, чтобы отобразить на экране весь текст, находящийся в свойстве caption.

Присваивая текст свойству Caption, можно принудительно заставить перейти его на новую строку. Для этого нужно включить в текст специальные символы управления — так называемые символы возврата каретки и перехода на новую строку. Сама идея этого способа и терминология появились очень давно, еще во времена существования механических пишущих машинок. Те, кому приходилось сталкиваться с этими хитроумными механизмами, наверняка помнят, что, когда при печати заканчивалась текущая строка, нужно было вручную, с помощью специального рычага прогнать бумагу на следующую строку (перевести строку), а затем вернуть каретку машинки в начало (вернуть каретку). В Visual Basic для перехода на новую строку нужно поместить в текст специальные ASCII символы — 13 (перевод строки) и 10 (возврат каретки). Для этой цели предусмотрена специальная константа vbCrLf. Ниже приведен пример установки свойства Caption, когда текст на экране будет отображаться в две строки:

Labell.Caption = "Первая строка" & vbCrLf & "Вторая строка"

3

Page 5: Лекция 9.Стандартные элементы управления

Изменение внешнего вида текстаКроме свойства Caption, в котором находится отображаемый на экране

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

Таблица. Свойства, изменяющие внешний вид текста на экранеСвойство Назначение

Alignment Определяет выравнивание текста в элементе управления (по правому или левому краю, по ширине)

Appearance Определяет внешний вид элемента управления (плоский или объемный)

BorderStyle Определяет тип обрамления вокруг элемента управленияFont Устанавливает тип гарнитуры, размер и стиль шрифта,

которым будет отображаться текст в элементе управленияForeColor и BackColor

Определяют цвет текста и фона элемента управления

UseMnemonic Определяет, как интерпретируется символ амперсанда (&), находящийся в свойстве caption. При установке этого свойства в True, символ амперсанда будет удаляться, а следующий за ним символ будет подчеркнут. Эта возможность используется для определения клавиш быстрого доступа в меню и диалоговых окнах

После присвоения свойству BorderStyle значения 1 - Fixed single, внешний вид элемента управления типа Label становится похожим на нередактируемое текстовое поле.

Описанные выше свойства используются для выделения надписей в форме и для усиления визуальных эффектов. На рис. показан результат установки различных значений некоторым свойствам элемента управления типа Label.

Рис. 4.4. Значения свойств Alignment, Appearance, и BorderStyle влияют на внешний вид

надписей, находящихся в форме

4

Page 6: Лекция 9.Стандартные элементы управления

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

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

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

Текстовое поле по умолчанию настроено на ввод одной строки текста, что в большинстве случаев вполне достаточно. Однако, иногда требуется ввести или отобразить на экране большой блок текста. Для этой цели в элементе управления предусмотрено два специальных свойства: MultiLine и ScrollBar.

Свойство MultiLine определяет способ отображения текста в текстовом поле. От его значения зависит, будет ли текст находится в одной строке или он будет перенесен по словам на несколько строк. Если значение свойства MultiLine равно True, текст будет автоматически переносится по словам на несколько строк. Чтобы перейти на новую строку при вводе текста, пользователь должен нажать клавишу <Enter>. Свойство ScrollBar определяет, будут ли в текстовом поле отображаться полосы прокрутки, и если да, то каков их тип. Оно может принимать одно из четырех значений: 0 - None, 1 - Horizontal, 2 - Vertical и 3 - Both. Полосы прокрутки используются в случае, если размер текстового поля не позволяет отобразить весь находящийся в свойстве Text текст. Значение свойства ScrollBar учитывается только в том случает, если свойство Multi-Line равно True. На рис. показано, как влияют значения свойств MultiLine и ScrollBar на внешний вид элементов управления типа TextBox.

Одной из удобных возможностей, которую можно часто встретить практически в любом Windows-приложении, является выделение текста, находящегося в текстовом блоке, при получении им фокуса. Напомним, что получение объектом фокуса— это активизация выбранного пользователем элемента управления в результате щелчка на нем кнопкой мыши либо последовательного нажатия на клавишу <ТаЬ>. И хотя такая возможность не предусмотрена в элементе управления типа TextBox непосредственно, ее довольно легко реализовать программно. Для этого поместите две приведенные ниже строки кода в обработчик

5

Page 7: Лекция 9.Стандартные элементы управления

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

Textl.SelStart = 0Textl.SelLength = Len(Textl.Text)

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

Рис. . Текстовые поля используются для ввода как одного-двух слов текста, так и целых абзацев, и даже страниц

Проверка введенных данныхПри работе с текстовыми полями часто возникает потребность

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

В Visual Basic 6 специально для проверки введенной в текстовое поле информации включено новое событие, которое называется Validate. В процедуру обработки данного события нужно поместить операторы, проверяющие введенные пользователем в текстовое поле данные. Событие Validate возникает только в том случае, если для выбранного элемента управления значение свойства CausesValidation равно True. В качестве

6

Page 8: Лекция 9.Стандартные элементы управления

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

If Not IsNumeric(Textl) Then MsgBox "Вводите только цифры"

Чтобы поэкспериментировать с данным событием, создайте новый стандартный проект Visual Basic. Поместите в форму кнопку и текстовое поле, и введите приведенную выше строку кода в обработчик события Vali-date для текстового поля. Запустите программу. После ввода информации нажмите клавишу <ТаЬ>, чтобы передать фокус кнопке. При этом на экране каждый раз будет появляться сообщение об ошибке, если вы, кроме цифр, ввели в текстовое поле буквы или пробелы. Установите значение свойства CausesValidation текстового поля равным False и снова запустите программу. Обратите внимание, что после нажатия клавиши <ТаЬ> сообщение об ошибке не будет появляться на экране, даже если вы ввели в текстовое поле только буквы.Элементы управления для принятия решения

Описанный выше способ как нельзя лучше подходит в том случае, если нужно ввести в программу некоторое число или строку текста. Но как быть, если нужно выяснить у пользователя простой вопрос, типа "Есть ли у него машина?" или "Каково его семейное положение?". Речь идет о таком типе вопросов, на которые можно дать однозначный ответ "Да/Нет"' или "Женат/Холост". Другими словами таких вопросов, на которые заранее можно предложить небольшой список готовых ответов. Если для разрешения подобной проблемы воспользоваться текстовым полем, то нужно очень тщательно проверять введенное пользователем значение на список допустимых слов. В противном случае программу очень легко будет завести в тупик, если пользователь вместо ожидаемого "Да или Нет" введет "Может быть" или просто сделает опечатку.

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

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

Элемент Название Назначение

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

Check Box Флажок Позволяет установить один или несколько параметров в положение Вкл./Откл. или представить логические данные типа истина/Ложь в наглядном виде

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

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

7

Page 9: Лекция 9.Стандартные элементы управления

List Box Список Позволяет выбрать элементы из заранее сформированного списка

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

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

Кнопка (элемент CommandButton)

Пожалуй, одним из самых важных элементов управления для любого приложения является кнопка или элемент типа CommandButton. Он предназначен для инициирования пользователем в программе некоторых действий, которые начинают происходить после щелчка на нем кнопкой мыши. Использовать элемент управления типа CommandButton очень просто — сначала его нужно поместить в форму, а затем присвоить его свойству Caption текст, который должен быть отображен на кнопке. Поместите программный код, выполняющий нужные действия, в процедуру обработки события Click. В данной процедуре, как и в любой другой, можно использовать любые допустимые в Visual Basic операторы.

Хотя большинство пользователей предпочитают щелкать на кнопках мышью, некоторые все же любят пользоваться клавиатурой и вводить команды исключительно с ее помощью. Очень часто так поступают пользователи, которые вводят большое количество информации в компьютер, например заполняют поля формы и отправляют информацию в базу данных. Для удовлетворения нужд последней категории пользователей, нужно сделать так, чтобы нажатие на определенную клавишу или комбинацию клавиш приводило к возникновению события, аналогичного щелчку мышью на кнопке. Это легко сделать, назначив кнопке клавишу быстрого доступа. Тогда, если пользователь нажмет клавишу <Alt> и, не отпуская ее, нажмет указанную на кнопке клавишу быстрого доступа, возникнет событие Click для данной кнопки формы.

Клавиша быстрого доступа назначается в момент присвоения значения свойству Caption элемента управления типа CommandButton. Поместите в строке, которая будет присвоена свойству Caption, символ амперсанда (&) перед буквой, соответствующей желаемой клавише быстрого доступа. Например, если вы хотите, чтобы после нажатия комбинации клавиш <Alt+P> срабатывала кнопка, на которой написано Print, присвойте свойству Caption этой кнопки строку &Print. Сам символ амперсанда не будет отображен на кнопке, вместо этого следующий за ним символ будет подчеркнут, в результате на кнопке появится надпись Print. Это означает, что для данной кнопки выбрана комбинация клавиш быстрого доступа <AIt+P>.

При создании формы, одну из ее кнопок можно по умолчанию поместить в фокус. Такая кнопка называется стандартной (default button). Тогда, если после открытия формы пользователь нажмет клавишу <Enter>, произойдет событие Click для стандартной кнопки. Указанное действие аналогично щелчку мышью на стандартной кнопке. Чтобы определить стандартную кнопку формы, нужно присвоить ее свойству Default значение True. Обратите внимание, что в форме может быть только одна стандартная кнопка.

8

Page 10: Лекция 9.Стандартные элементы управления

В форме можно также назначить кнопку отмены операции (cancel but-ton), которая аналогична описанной в предыдущем абзаце стандартной кнопке, за исключением того, что событие Click возникает после нажатия клавиши <Esc>. Для этого присвойте свойству Cancel нужной кнопки значение True. Как и в предыдущем случае, в форме может быть только одна кнопка отмены операции. Если свойствам Default и Cancel некоторых кнопок присвоить значение True, то аналогичным свойствам других кнопок автоматически будут присвоены значения False.Флажок (элемент Check Boxes)

Флажки используются для отображения в форме логических данных, т.е. данных, которые могут принимать только два значения — True или False. Другими словами, с помощью флажков у пользователя можно запросить ответы на поставленные программой вопросы в форме "Да/Нет". Работа данного элемента управления чем-то напоминает обычный электрический выключатель. Он может находиться только в двух состояниях — выключенном или включенном; никаких промежуточных состояний быть не может! Когда флажок находится "во включенном состоянии", на нем изображена галочка (√). Это означает, что пользователь положительно ответил на поставленный вопрос. Если же флажок находится "в выключенном состоянии", квадратик будет пустым (□). Это означает, что пользователь отрицательно ответил на поставленный вопрос.

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

Внешний вид включенного и выключенного флажка зависит от значения его свойства , style. Если установить значение данного свойства равным 1 - Graphical, то вместо обычного квадратика с галочкой, флажок примет вид кнопки, состояние которой (утопленное или приподнятое) зависит от значения соответствующего логического параметра. Кроме того, на кнопку можно даже поместить какой-нибудь рисунок (рис. ).

Рис. Флажки используются для ввода и отображения логических данных

9

Page 11: Лекция 9.Стандартные элементы управления

На рис. показано два графических флажка. Для выбора изображения, которое нужно поместить на кнопку используются два свойства— Picture и DownPicture. Первое свойство определяет картинку, которая появится на кнопке, когда она находится в отжатом, или приподнятом состоянии. Соответственно, второе свойство определяет картинку, которая появится на кнопке, когда та находится в нажатом, или утопленном состоянии.Переключатель (элемент option Button)

Иногда переключатели называют радиокнопками (radio button), поскольку их функции очень похожи на функции, выполняемые кнопками переключения диапазонов в автомобильных радиоприемниках. Переключатели всегда должны находиться в группах, причем только один из переключателей группы может быть "нажат" или активизирован. Описываемый элемент управления служит для выбора одного параметра из представленной группы взаимоисключающих параметров. Давайте поэкспериментируем с переключателями. Поместите в форму три переключателя. При создании переключателя, его свойству Value по умолчанию присваивается значение False. Таким образом, в исходном состоянии переключатель находится в выключенном состоянии. Обратите внимание, что только один из переключателей группы может находиться во включенном состоянии. Другими словами, как только вы установите значение свойства Value одного из переключателей равным True, аналогичные свойства всех других переключателей данной группы сбрасываются в False (рис.).

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

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

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

Private Sub optDrink_Click(Index As Integer) Select Case Index Case 0MsgBox "Вы выбрали чай" Case 1MsgBox "Вы выбрали кофе" Case 2MsgBox "Вы выбрали какао" End Select End Sub

■ He помещайте код в процедуры обработки событий, поступающих от отдельных элементов переключателя. Если нужно определить состояние переключателя, воспользуйтесь оператором If, как показано ниже.

Private Sub cmdStartDrink_Click() If optSugar - True ThenDoWithSugar ElseDoWithoutSugar End If End Sub

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

10

Page 12: Лекция 9.Стандартные элементы управления

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

Из рис. следует, что только один из переключателей, расположенных в форме, может находиться в выбранном состоянии. Однако иногда надо поместить в форму несколько наборов переключателей и установить по одному переключателю в каждом наборе. Для решения подобной задачи набор логически связанных друг с другом переключателей нужно поместить в объект-контейнер, которым обычно является группа. Использование объектов-контейнеров, таких как элементы управления типа Frame, будет рассмотрено ниже. А пока взгляните на рис. , на котором показано, как можно объединить два набора переключателей в различные группы.

Рис. Чтобы создать несколько групп переключателей, поместите их в объекты-контейнеры, такие как Frame или PictureBox

Список (элемент ListBox)

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

Ниже перечислены основные элементы списка.■ Список элементов. Как следует из названия, это список тех

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

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

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

11

Page 13: Лекция 9.Стандартные элементы управления

Использование списков можно сравнить с выбором телевизионных каналов. Компания кабельного телевидения решает, какие каналы она будет транслировать в регионе и формирует список. Пользователю остается лишь выбрать один из представленных в этом списке каналов для просмотра Добавить же что-либо в список пользователи не могут, даже если их полностью не устраивает предложенная компанией программа. Но вернемся к Visual Basic, формированием элементов списка занимается программист на этапе разработки программы либо сама программа во время своего выполнения. Естественно, что код для формирования списка должен написать программист. Пользователь может лишь сделать выбор из предложенного списка.

При помещении первого элемента управления типа ListBox в форму вы увидите на экране пустой прямоугольник, внутри которого будет находиться текст List1 (стандартное имя списка, назначенное Visual Basic). В новом списке не будет ни полосы прокрутки ни, естественно, элементов, которые сможет выбрать пользователь. Вертикальная полоса прокрутки появляется у списка автоматически, как только новый добавляемый к списку элемент уже не будет помещаться в выделенной для списка области на экране. Обратите внимание, что у списка нет горизонтальной полосы прокрутки. Поэтому вы должны позаботиться о том, чтобы его ширина была достаточной для отображения самого длинного элемента списка.Использование списков

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

Начните новый стандартный проект Visual Basic, поместите в форму элемент управления типа ListBox, после чего добавьте приведенный ниже фрагмент кода в процедуру обработки события Load для формы.

Private Sub Form_Load() Dim i As IntegerFor i = 1 To 100Listl.Addltem "Элемент номер " & i Next iEnd Sub

12

Page 14: Лекция 9.Стандартные элементы управления

Хотя в приведенном выше примере наполнение списка элементами произошло в момент выполнения программы, существует возможность создать готовый список еще во время разработки программы. Для этого нужно поместить элементы списка в свойство List. Каждая строка свойства List соответствует одному элементу списка. После ввода текущего элемента для перехода на новую строку нажмите клавиши <Ctrl+Enter>.

Запустите проект на выполнение. На экране вы увидите список, в котором будет находиться 100 элементов. Для очистки списка от его содержимого существует метод Clear:

Listl.ClearЭлементы списка хранятся в виде массива. К любому из них можно

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

Print Listl.List(0)

Чтобы протестировать работу этого оператора, прервите работу программы, нажав клавиши <Ctrl+Break>, после чего наберите этот оператор в окне Immediate.

Существуют еще два полезных свойства, которые влияют на работу элемента управления типа ListBox,— ListCount и Listlndex. С помощью свойства ListCount можно определить, сколько элементов находится в списке; свойство Listlndex содержит номер выбранного элемента списка.

Внимание!

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

■ . ' ........ • ■ . . ■

For i = 0 То Listl.ListCount - 1' Обработка элемента Listl.List(i) Next i

Если ни один элемент не выбран в списке, значение свойства Listlndex равно -1.

заметкуЧтобы поэкспериментировать со свойством Listlndex, добавьте в

обработчик события Click следующую строку кода:Msgbox Listl.List(Listl.Listlndex)

13

Page 15: Лекция 9.Стандартные элементы управления

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

Существует еще один способ узнать, какой элемент списка выбрал пользователь. Для этого нужно воспользоваться значением свойства Text элемента управления типа ListBox. Дело в том, что значением данного свойства является строка списка, находящаяся в фокусе. Таким образом, в случае простого списка строка, на которой щелкнул пользователь, автоматически помещается в свойство Text. Если никакой элемент в списке еще не выбран, значение свойства Text равно пустой строке (" ").

Private Sub Listl_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyDelete And Listl.Listlndex <> -1 ThenListl.Removeltem Listl.Listlndex End IfEnd Sub

Запустите программу и убедитесь, что при нажатии клавиши <Delete> действительно происходит удаление из списка выбранного элемента.Добавление элементов в список

Вы уже знаете, как добавить новый элемент в конец списка с помощью метода Addltem. Однако иногда нужно добавить что-нибудь не в конец, а в середину списка, после определенного элемента. Оказывается это легко сделать, так как у метода Addltem есть еще один необязательный параметр — индекс списка, который мы пока не рассматривали. Описываемый необязательный параметр как раз и определяет место в списке, куда будет добавлен новый элемент. При занесении элемента в список, нужно указать индекс существующего в списке элемента, перед которым будет занесен новый элемент. Например, если в списке находится пять элементов, и вы хотите добавить еще один элемент перед третьим элементом (его индекс равен 2), воспользуйтесь приведенным ниже оператором:

Listl.Addltem "Новый элемент", 2Сортировка элементов списка

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

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

Описываемая возможность сортировки списков является очень удобной и позволяет быстро упорядочить ваши данные. Однако изменить значение свойства Sorted для конкретного списка можно только при разработке программы. Поэтому, если во время выполнения программы вам нужно периодически отключать сортировку, следует воспользоваться двумя списками, один из которых будет отсортирован, а другой— нет. Изменяя свойство Visible, вы легко сможете отобразить на экране нужный список.

14

Page 16: Лекция 9.Стандартные элементы управления

Изменение внешнего вида списковКроме списков стандартного вида, один из которых показан на рис. .

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

Внешний вид списка определяется значением свойства Style. На рис. показано два варианта списков, которые получаются, если установить значения свойства Style равными 0 -Standard и 1 - Checkbox. Значение описываемого свойства можно изменить и во время выполнения программы, воспользовавшись одной из внутренних констант Visual Basic — vbListBoxS-tandard или vbListBoxCheckBox соответственно.

На внешний вид списка влияет также значение свойства Columns. По умолчанию оно равно 0, в результате чего на экране будет отображаться обычный список, о котором говорилось выше. Если установить значение этого свойства в 1, на экране будет отображен список, состоящий из одной колонки, но с горизонтальной полосой прокрутки. Чтобы создать список из двух колонок, присвойте этому свойству значение 2 и т.д. Другими словами значение этого свойства определяет количество колонок в списке. В случае, если список состоит из нескольких колонок, он будет прокручиваться в горизонтальном направлении. Число колонок можно изменить как в обычном списке, так и в списке, состоящем из флажков. На рис. показан пример одно- и двухколонного списка. Следует отметить, что принцип работы элемента управления типа ListBox не зависит от количества колонок.

Выбор нескольких элементов в спискеПри работе с некоторыми списками бывает очень удобно, если

пользователь сможет выбрать в них сразу несколько элементов. Для реализации подобного режима в Visual Basic предусмотрено свойство Multi-Select. Оно может принимать три значения: 0 - None, 1 - Simple и 2 -Ex-tended.

■ 0 - None. Данное значение принято по умолчанию. Это означает, что в списке нельзя выбрать несколько элементов. При установке двух других значений свойства MultiSelect, множественный выбор в списке будет разрешен. Разница состоит только в способе выбора.

■ 1 - Simple. При установке этого значения свойства MultiSelect разрешается выбор нескольких элементов в списке с помощью мыши или клавиатуры. Щелчок мышью на элементе списка приводит к его выбору, а повторный щелчок — к отмене выбора. При использовании клавиатуры нажатие на одну из клавиш управления курсором приводит к перемещению

15

Page 17: Лекция 9.Стандартные элементы управления

фокуса (прямоугольной пунктирной рамки) на другой элемент списка. Для выбора элемента, на котором находится фокус, достаточно нажать клавишу <Пробел>. Повтоное нажатие на эту клавишу приводит к отмене выбора.

■ 2 – Extended. При установке данного значения свойства MultiSelect, алгоритм выбора несколько усложняется. В этом режиме можно осуществлять множественный выбор элементов из списка, как это принято в системе Windows. Для выбора непрерывной последовательности элементов следует щелкнуть на первом из них, нажать клавишу <Shift> и, удерживая ее, щелкнуть на последнем элементе. В результате будут выбраны все элементы списка, находящиеся между ними. Чтобы добавить к выбранному блоку новый элемент либо отменить выбор какого-либо элемента, нажмите клавишу <Ctrl> и, удерживая ее, щелкните на нужном элементе.

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

Факт выбора нескольких элементов в списке отмечается в свойстве Se-lected. Подобно свойству List, о котором мы говорили выше, данное свойство является массивом. Причем размерность этого массива соответствует общему числу элементов в списке. Если какой-либо элемент списка выбран, соответствующий ему элемент свойства Selected будет равен True, а если не выбран, то — False.

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

For I = 0 to Listl.ListCount - 1If Listl.Selected(I) Then Forml.Print Listl.List(I)

Next IАссоциация данных с элементами списка

Очень часто возникает задача представить список каких-либо элементов, с которыми оперирует программа, в наглядном виде. Приведем простой пример. Предположим, вы создаете базу данных сотрудников какого-либо отдела. Каждому из сотрудников присвоен табельный номер, по которому программа "опознает" этого человека. Пользователю вашей программы табельный номер сотрудника ни о чем не говорит. Для него желательно, чтобы программа выводила список сотрудников в привычном виде, т.е. с именами и фамилиями. Таким образом, нужно сформировать список сотрудников и ассоциировать с каждым элементом этого списка табельный номер. Для этой цели в Visual Basic предусмотрено специальное свойство элемента управления типа ListBox, которое называется ItemData. Данное свойство является массивом целых чисел двойной точности (Long Integer), размерность которого соответствует общему числу элементов списка. Одной из важных особенностей описываемого свойства является то, что порядок элементов в списке не влияет на данные, которые находятся в массиве ItemData. Другими словами, если вы ассоциировали с каким-либо

16

Page 18: Лекция 9.Стандартные элементы управления

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

Listl.ItemData(0)А если нужно получить число, ассоциированное с текущим

выделенным элементом списка, воспользуйтесь таким оператором:Listl.ItemData(Listl.Listlndex)

Напомним, что в свойстве List Index хранится индекс текущего выбранного элемента в списке.

Как только в список добавляется новый элемент, для него тут же создается соответствующая ячейка в массиве ItemData. Само собой разумеется, что ваша задача поместить в правильную ячейку этого массива ассоциированное число. Но как узнать ее номер, особенно если после добавления нового элемента, список будет отсортирован? К счастью, в Vis-ual Basic эта задача решается очень просто. Нужно воспользоваться значением свойства Newlndex элемента управления ListBox. В нем будет находиться индекс последнего добавленного в список элемента. В приведенном ниже примере к отсортированному списку сотрудников добавляется новый элемент, после чего табельный номер нового сотрудника записывается в правильную ячейку массива ассоциированных данных Item-Data.

lstCustomers.Addltem "Иванов, Петр"lstCustomers.ItemData(lstCustomers.Newlndex) = 21472301Создав массив ассоциированных данных, вы сразу "убиваете двух

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

Private Sub lstCustomers_Click()Dim lgThisCust As Long

lgThisCust =lstCustomers.ItemData(lstCustomers.Listlndex)Call LookUpAccount(lgThisCust)

End SubПоле со списком (элемент comboBox)

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

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

■ Поле с обычным списком. В этом типе элемента управления информация отображается в обычном (не раскрывающемся) списке (рис. ).

17

Page 19: Лекция 9.Стандартные элементы управления

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

■ Раскрывающийся список. Как следует из его названия, первоначально список находится в свернутом (закрытом) состоянии (рис. ). Чтобы сделать выбор, пользователь должен раскрыть список, щелкнув на направленной вниз стрелке. Основным отличием данного элемента управления от двух предыдущих является то, что пользователь не может ввести новый элемент в поле. Он может выбрать лишь то, что представлено в списке.

С точки зрения программирования, работа с полями со списком ничем не отличается от Работы с обычными списками. Для изменения содержимого списка используются методы Addltem, Removeltem и Clear. Элементы списка могут быть как отсортированы, так и нет. У полей со списками также предусмотрены свойства itemData и Newlndex. Единственное отличие описываемых списков — наличие текстового поля для ввода информации.

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

18

Page 20: Лекция 9.Стандартные элементы управления

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

Работа с раскрывающимся списком ничем не отличается от работы с обычным списком, описанным выше. Как мы уже говорили, основным отличием раскрывающегося списка является только то. что он занимает меньше места на экране. Для того чтобы выбрать элемент из раскрывающегося списка, вначале нужно его раскрыть. Для этого щелкните на направленной вниз стрелке, расположенной в правой части списка. Когда список открыт, элементы в нем выбираются точно так же, как и в обычном списке — с помощью щелчка мыши либо нажатия клавиши <Пробсл>. После того как выбор будет сделан, значение появится в текстовом поле раскрывающегося списка, а сам список автоматически закроется.

Чтобы создать раскрывающийся список, поместите в форму элемент управления типа Combobox и установите значение свойства Style равным 2 - Dropdown List. Затем добавьте элементы в список, воспользовавшись свойством List, как мы это делали для обычных списков. Не забывайте, что пользователи сами уже ничего не смогут добавить в список.Установка начального значения

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

19

Page 21: Лекция 9.Стандартные элементы управления

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

Элемент, который должен быть выделен в списке по умолчанию, устанавливается с помощью свойства ListIndex. Предположим, что нужный вам город расположен в представленном на экране списке третьим, и вы хотите, чтобы при открытии формы этот город был выделен по умолчанию. Тогда воспользуйтесь приведенным ниже оператором (напомним, что индексы элементов списка начинаются с нуля):

lstCities.Listlndex = Данный способ годится для установки начальных значений всех трех

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

Последнюю группу внутренних элементов управления Visual Basic мы назвали "элементами специального назначения", поскольку их нельзя отнести ни к одному из описанных выше типов. Тем не менее это совсем не означает, что они редко используются или совершенно бесполезны. Ниже приведен список рассматриваемых в данном разделе специальных элементов управления.

■ Полосы прокрутки (элементы типа VScrollBar и HScrollBar).■ Таймер (элемент типа Timer).■ Группа (элемент типа Frame).

Полосы прокруткиПринцип работы полос прокрутки чем-то напоминает ползунок

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

В Visual Basic предусмотрено два типа полос прокрутки: вертикальная и горизонтам. В документации они называются как элементы управления типа VScrollBc HScrollBar соответственно.

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

С точки зрения программирования, полосы прокрутки являются одними из самых простых элементов управления. Перед началом работы вам необходимо определить диапазон вводимых чисел установив значения свойств Min и Мах. Дальнейшая работа с описываемым элементом управления заключается в чтении и установке свойства Value. Как правило, выбирается диапазон чисел от 0 до 100. поскольку при чтении значения свойства Value величины должны выражаться в процентах.

20

Page 22: Лекция 9.Стандартные элементы управления

Значения свойств Min, Max и Value элементов управления типа vScroll-Bar и HScrollBar являются целыми числами, т.е. диапазон их изменений составляет от -32768 до +32767. Значение свойства Value напрямую зависит от минимального и максимального значения диапазона, установленного в свойствах Min и мах. Не забывайте об этой при программировании, поскольку использование неправильного типа данных или установка неправильного значения этих свойств приведет к ошибке.

При изменении значения свойства Value автоматически возникает событие Change описываемого элемента управления. Давайте поэкспериментируем с горизонтальной полосой прокрутки. Создайте новый стандартный проект Visual Basic и расположите в форме горизонтальную полосу прокрутки и текстовое поле. Поместите приведенный ниже текст программы в окно кода.

Private Sub Form_Load()HScrolll7Min = Me.LeftHScrolll.Max = Me.ScaleWidth

End SubPrivate Sub HScrolll_Change()

Textl.Left = HScrolll.Value End Sub

Запустите программу. Обратите внимание, что, как только вы начнете перетаскивать бегунок полосы прокрутки, положение на экране текстового поля будет синхронно изменяться. Для перемещения бегунка можете также воспользоваться клавишами управления курсором, а так же <Ноте> и <End>.Изменение величины перемещения

Если вам приходилось работать с одним из Windows-приложений, например, вы, наверное, обращали внимание, что с помощью полосы прокрутки можно быстро перемещаться по документу, а также выполнять его плавную прокрутку. Например, если щелкну на одной из стрелок, расположенных в начале или конце полосы прокрутки, документ будет плавно перемещен на небольшое расстояние в соответствующем направлении, а если щелкнуть прямо на полосе прокрутки (не на бегунке!), то будет выполнена прокрутка документа на целую страницу.

Величина изменения значения свойства Value после щелчка на одной из стрелок полосы прокрутки зависит от значения свойства SmallChange. Как следует из названия, свойства Small Change нужно присвоить небольшое значение, чтобы получить плавное перемещение бегунка. По умолчанию ему присвоено значение 1, которое может применяться в большинстве случаев.

Если щелкнуть на свободной части полосы прокрутки (между ползунком и одной из стрелок), значения свойства Value изменится на большую величину, чем после щелчка на одной из стрелок. Оно определяется значением свойства LargeChange. По умолчанию значение этого свойства, как и свойства SmallChange, равно 1. Однако, в зависимости от выполняемых функций вашего приложения, вы должны присвоить свойству LargeChange соответствующее значение. Например, если положение бегунка будет отсчитываться в процентах (т.е. значение Min = 0, а Мах = 10 0), то самым подходящим значением для свойства LargeChange будет значение 10.

21

Page 23: Лекция 9.Стандартные элементы управления

Рис. 4.16. Щелчок на одной из частей полосы прокрутки приводит к изменению значения свойства value на некоторую величину, которая зависит от места щелчка

Отображение значения свойства value на экранеХотя визуальное представление чисел очень удобно, иногда у

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

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

■ Form_Load. Это событие используется для отображения начального значения свойства Value после назначения диапазона

изменения этого свойства.■ Change. Данное событие происходит в момент отпускания кнопки

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

■ Scroll. Это событие возникает после перемещения бегунка полосы прокрутки. Оно позволяет отобразить на экране значение свойства Value или выполнить какие-либо друг действия до того, как произойдет событие Change.

Чтобы реализовать описанный выше пример с выбором букв алфавита, создайте новый стандартный проект Visual Basic. Поместите в форму полосу прокрутки и элемент управления типа Label. В окно кода введите текст программы, приведенный в листинге 4.1.

Листинг4.1. Пример использования полосы прокруткиPrivate Sub Form_Load()' Установим числовые значения свойств Мах и Min

22

Page 24: Лекция 9.Стандартные элементы управления

HScrolll.Max = Asc("Z") HScrolll.Min = Asc("A")' Отобразим начальное значение свойства Value Label1.Caption = Chr$(KScrolll.Value) End Sub

Private Sub HScrolll_Change()Labell.Caption = "Поиск " & Chr$(HScrolll.Value) ' Здесь нужно поместить код для поиска значения в базе данныхEnd Sub

Private Sub HScrolll_Scroll ()Labell.Caption = "Отпустите кнопку, чтобы выбрать " & Chr$

(HScrolll.Value)End SubЗапустите программу и обратите внимание, как будет изменяться

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

Как следует из названия, элемент управления Timer чем-то напоминает ручной секундомер или часы с будильником.

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

■ Элемент управления типа Timer может многократно выполнять отсчет заданного интервала времени, если значение свойства Enabled равно True.

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

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

Чтобы начать эксперименты с таймером, поместите в форму элемент управления типа Timer, как показано на рис. Данный элемент управления в режиме разработки программы всегда отображается в форме в виде пиктограммы, но при выполнении он становится "невидимым".

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

23

Page 25: Лекция 9.Стандартные элементы управления

1. Вначале надо установить значение свойства Interval Timer всегда отображается в форме в виде пиктограммы

2. После этого значение свойства Enabled следует установить равным True.

Свойство Enabled является своего рода кнопкой, запускающей и останавливающей таймер. Если его значение равно True, каждый раз по истечении заданного в свойстве Interval интервала времени будет вызываться процедура обработки события Timer. Свойство Interval может иметь любое значение в интервале от 0 до 65535. Если данному свойству присвоить значение 0, элемент управления типа Timer перейдет в неактивное состояние. Любое другое значение устанавливает временной интервал в миллисекундах между запуском таймера и до возникновения события Timer. Например, если вы хотите установить временной интервал 10 с, присвойте свойству Value значение 10000.

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

Листинг 4.2. Отсчет больших интервалов времени с помощью элемента управления типа Timer

Option ExplicitDim dtNextTime As Date

Private Sub Form_Load() ' Заведем таймер Timerl.Interval = 500 Timerl.Enabled = True' Нам нужно выполнять некоторые действия каждые 5 мин.dtNextTime = DateAdd("n", 5, Now)End Sub

Private Sub Timerl_Timer ()If Now >= dtNextTime ThenTimer1.Enabled = False' Здесь истек заданный интервал времени 5 мин. .' Выполните требуемые действия, а затем

24

Page 26: Лекция 9.Стандартные элементы управления

' снова измените значение переменной dtNextTimeDebug.Print "Произошло событие таймера в " & NowdtNextTime = DateAddC'n", 5, Now)Timerl.Enabled = True End If End SubВ этом листинге в процедуре обработки события Timer сначала

выполняется проверка текущего системного времени и, если истек заданный интервал (в данном случае — 5 мин.), выполняется оператор отладочной печати. Основным элементом листинга является функция DateAdd, с помощью которой определяется значение системных часов, которое они будут иметь через заданный интервал времени.

25