Интегрированная среда разработки
Введение
Visual Basic (Beginner’s All-purpose Symbolic Instruction Code) представляет собой современную систему визуального программирования в среде Windows.
Visual Basic является и интерпретатором, и компилятором. Как интерпретатор, Visual Basic позволяет запускать приложения непосредственно в среде разработки (команда Run \ Start). Как компилятор, Visual Basic предоставляет возможность создавать независимые от среды разработки исполняемые ЕХЕ-файлы (команда File \ Make имя_файла_проекта…).
Исторически различные приложения Microsoft включали различные языки макросов, значительно отличающиеся друг от друга (WordBasic, ExcelMacro, AccessBasic и т.д.). Начиная с Office 97, корпорация Microsoft стала снабжать свои приложения общим языком макросов – VBA (Visual Basic for Applications). Visual Basic for Applications является диалектом Visual Basic, учитывающим в наборе используемых объектов и функций специфику приложений (текстовых редакторов, электронных таблиц и т.п.). Поэтому Visual Basic широко используется для разработки приложений под Windows на основе продуктов Microsoft.
Visual Basic 6.0 поставляется корпорацией Microsoft в трех различных изданиях. Издания различаются набором возможностей и комплектом поставляемой документации. Язык Visual Basic во всех изданиях один и тот же.
· Learning Edition – учебное издание (бывшее стандартное). Предоставляет базовый набор элементов управления и основные возможности для создания приложений для Microsoft Windows и Windows NT.
· Professional Edition – профессиональное издание. Включает все возможности учебного издания. Содержит ряд дополнительных элементов управления. Обеспечивает расширенные возможности доступа к базам данных и работы в Интернет (в частности, Internet Information Server Application Designer, integrated Visual Database Tools and Data Environment, ActiveX Data Objects, Dynamic HTML Page Designer).
· Enterprise Edition – производственное издание. Предназначено для разработки корпоративных систем. Включает все возможности профессионального издания и большое количество дополнительных элементов управления и средств разработки сложных распределенных клиент-серверных приложений и приложений для Интернет/интранет (в частности, Microsoft SQL Server, Microsoft Transaction Server, Internet Information Server, Visual SourceSafe, SNA Server).
Имея длинную предысторию, язык Visual Basic обременен многими устаревшими конструкциями, оставленными в языке для обратной совместимости с предыдущими версиями. Поэтому ниже при описании синтаксиса указываются лишь рекомендуемые конструкции. В качестве металингвистических символов используются квадратные скобки для необязательных конструкций ([]), фигурные скобки для обязательных конструкций ({}), вертикальная черта для разделения альтернативных конструкций (|), многоточие для возможного повторения предшествующей конструкции (…) и комбинация запятой с двумя точками для возможного повторения предшествующей конструкции в виде списка конструкций, разделенных запятой.
Интегрированная среда разработки
После запуска Visual Basic можно создать новый проект, указав его тип (например, Standard EXE или VB Enterprise Edition Controls), загрузить уже существующий проект или создать новый проект с помощью мастера (например, мастера приложений VB Application Wizard). Приложение, созданное мастером, можно в дальнейшем дорабатывать с помощью других штатных средств среды разработки.
Главное окно интегрированной среды разработки (IDE - Integrated Development Environment) содержит строку меню (Menu Bar), панели и окна. Контекстное меню (Context Menu), как обычно, открывается щелчком правой кнопки мышки.
По умолчанию главное окно представляет многодокументный интерфейс (MDI - Multiple Document Interface). В частности, панели и окна могут “прикрепляться” (dockable) к одному из его краев. Однодокументный интерфейс (SDI - Single Document Interface) хотя и может быть установлен при настройке (команда Tools \ Options…), но, начиная с Visual Basic 5.0, считается устаревшим.
Программирование на Visual Basic
Правила кодирования
Размещение операторов
В каждой строке кода размещается, как правило, один оператор, причем целиком. Однако иногда для улучшения читабельности одна логическая строка кода может быть разбита на несколько физических строк (с помощью символа продолжения строки – символа подчеркивания) или несколько логических строк могут быть объединены в одну физическую (с помощью символа объединения строк – символа двоеточия), например:
1. Text1.Text = ”Эта строка ” & _
”могла бы быть ” & _
”очень длинной.”
2. Text1.BackColor = vbYellow: Text1.ForeColor = vbRed
Комбинирование разбиений и объединений строк допускается, но не рекомендуется.
Комментарии
Комментарий начинается со знака апострофа и занимает всю оставшуюся часть строки. Редактор кода не допустит одновременное продолжение строки и ее комментирование. Примеры:
1. ’Это комментарий, занимающий целую строку без переноса
2. Text1.ForeColor = vbRed ’Описание констант ищите в _
Object Browser по шаблону vb*
Устанавливать и снимать знак комментария в текущей строке можно мышью при помощи кнопок Comment Block и Uncomment Block панели инструментов Edit (панель открывается по команде View \ Toolbars \ Edit). Для работы с блоком строк его следует предварительно выделить.
Использование оператора комментария Rem считается устаревшим.
Кнопки Comment Block и Uncomment Block можно, например, установить на панели инструментов Standard (команда View \ Toolbars \Customize… и последующее перетаскивание кнопок с вкладки Commands категории Edit на панель).
Переменные
Типы данных
Таблица -1. Типы данных
№ п/п | Тип | Размер, байт | Содержимое | Область значений | ||
Boolean | Логическое значение | True или False | ||||
Byte | Целое неотрицательное | 0 … 255 | ||||
Integer | Целое | -32768 … +32767 | ||||
Long | Длинное целое | -2147483648 … +2147483647 | ||||
Single | Число с плавающей точкой одинарной точности | -3.402823E+38 … -1.401298E-45; +1.401298E-45 … +3.402823E+38 | ||||
Double | Число с плавающей точкой двойной точности | -1.79769313486231E+308 … -4.94065645841247E-324; +4.94065645841247E-324 … +1.79769313486232E-308 | ||||
Currency | Число с фиксированной точкой (денежная величина) | -922337203685477.5808 … +922337203685477.5807 | ||||
Decimal (подтип Variant) | Десятичное целое | - 79228162514264337593543950335 … + 79228162514264337593543950335 | ||||
Десятичное с фиксированной точкой | -7.9228162514264337593543950335 … -0.0000000000000000000000000001; +0.0000000000000000000000000001 … +7.9228162514264337593543950335 | |||||
Date | Дата/время | #01/01/0100 00:00:00# … #12/31/9999 23:59:59# | ||||
String10 bytes + string length | Строка переменной длины | Длина >= 01 to approximately 65,400 | ||||
String * длинаLength of string | Строка фиксированной длины | длина = 1 … 65526 (= 2^16 - 10) | ||||
Object | Объект | Любая ссылка на объект | ||||
Variant | Все | Null, Error, ЧИСЛОВОЙ ДО Double, String, Object ИЛИ массив | ||||
имя_типа | Пользовательский тип (Type … End Type) | |||||
OLE объект типа имя_типа | ||||||
Данные типа Boolean представляют собой в Visual Basic интерпретацию числового типа. Однако это обстоятельство связано с историй развития языка и в современных редакциях программ его лучше не учитывать.
Byte/Integer/Long
Присваивание переменной целого типа вещественного значения сопровождается автоматическим округлением (по бухгалтерскому правилу – полуцелое число округляется до ближайшего четного).
Date
Литералы даты/времени могут задаваться, в частности, в американском формате (#[мм/дд/гг[гг]] [чч[:мм[:сс]] [AM | PM]]#). Если вместо знаков номера (#) использовать кавычки ("), то следует применять установленный в системе формат даты и времени.
String
Операции над строками:
& - сцепление (вместо знака амперсэнда можно использовать знак плюс, но это не рекомендуется).
Variant
Переменные типа Variant являются динамически типизируемыми, т.е. совместимыми по присваиванию с данными любых других типов. Однако их применение связано с потреблением дополнительных ресурсов и поэтому должно быть обоснованным.
Объявление переменных
Option Explicit
Для задания опции явного объявления переменных (что рекомендуется) необходимо включить оператор Option Explicit в секцию (General) (Declarations) кода.
Техника указания типа данных с использованием знака типа (%, &, !, #, @, $) считается устаревшей. Техника приписывания типа данных по первой букве идентификатора (операторы DefBool, DefByte, DefInt, …) вносит путаницу в текст программы.
Для автоматического включения в код оператора Option Explicit следует открыть диалоговое окно Options (команда меню Tools \ 0ptions...) и на вкладке Editor установить флажок Require Variable Declaration.
Dim
Для объявления переменных может использоваться оператор Dim со следующим синтаксисом:
Dim {имя_переменной As тип_данных},..
Имя (идентификатор) переменной должно начинаться с буквы и состоять из букв, цифр и символа подчеркивания (_). Длина имени – до 255 символов. Имя не может быть зарезервированным ключевым словом (например, Print).
Если конструкция As тип_данных будет опущена (что, однако, не рекомендуется), то по умолчанию будет применен тип Variant.
Область определения переменных
Локальные переменные
Локальные переменные определяются внутри процедуры и доступны только в ней.
Переменные контейнера
Переменные контейнера определяются в секции (General) (Declarations) и доступны только внутри соответствующего контейнера (формы, модуля, класса).
Глобальные переменные
Глобальные переменные определяются в секции (General) (Declarations) модуля. При этом вместо оператора Dim используется зарезервированное слово Public. Глобальные переменные доступны во всех модулях и процедурах проекта.
Время жизни переменных
Локальные переменные существуют в памяти с момента объявления до выхода из процедуры.
Статические переменные
Переменные, объявленные как статические, существуют в памяти и сохраняют свое значение в течение всего времени, пока существует в памяти форма или модуль. При объявлении статической переменной в операторе объявления вместо ключевого слова Dim используется слово Static:
Static {имя_переменной As тип_данных},..
Чтобы объявить статическими все локальные переменные процедуры, следует записать ключевое слово Static в заголовке процедуры:
Static {Sub | Function | Property} имя_процедуры([список_аргументов])
Массивы
В Visual Basic массивы могут быть объявлены как статические или динамические.
Статические массивы
В объявлении статического массива указываются границы индексов для каждого измерения:
{Dim | Public | Static} {имя_переменной({нижняя_гр To верхняя_гр},..) As тип_данных},..
Динамические массивы
Динамический массив объявляется без указания границ индексов и числа измерений:
{Dim | Public | Static} {имя_переменной() As тип_данных},..
В дальнейшем с помощью оператора ReDim устанавливается или изменяется его структура:
ReDim [Preserve] {имя_переменной({нижняя_гр To верхняя_гр},..)},..
Использование ключевого слова Preserve позволяет сохранить содержимое массива при изменении его структуры. Однако в этом случае можно изменять только верхнюю границу последнего измерения.
Присваивание массивов
Переменной, соответствующей динамическому массиву, может быть присвоено значение переменной, соответствующей статическому или динамическому массиву.
Пользовательский тип данных
Для определения пользовательского типа данных используется оператор Type, размещаемый в секции (General) (Declarations) модуля:
{Public | Private} Type имя_типа
имя_элемента [([нижняя_гр To верхняя_гр],..)] As тип_данных
…
End Type
Доступ к элементам переменной пользовательского типа осуществляется в следующей форме:
имя_переменной.имя_элемента[([идекс],..)]
Переменным пользовательского типа можно присваивать значения других переменных того же типа.
Константы
Для объявления констант используется оператор Const:
[Public | Private] Const имя_константы [As тип_данных] = выражение_константное
Константы могут быть определены как Public или Private в секции (General) (Declarations) модуля, или внутри процедуры (тогда они локальные).
Информацию о существующих константах, их значениях и применении можно получить из каталога объектов (Object Browser).
Процедуры
.В зависимости от назначения процедуры разделяются на процедуры обработки событий и процедуры общего назначения.
Процедуры в Visual Basic не могут быть вложенными.
Процедуры обработки событий
Процедуры обработки событий имеют имена, полученные сцеплением при помощи символа подчеркивания (_) имен объекта и события, например, Command1_Click. Объявляются по умолчанию как закрытые (Private).
Процедуры общего назначения
Для создания процедуры общего назначения достаточно ввести заголовок процедуры в секции (General) окна кода.
Примечание
Тем не менее,общую процедуру можно вызвать из другой формы,если только
она не была объявлена как Private.Для этого следует указать перед ее
вызовом имя формы,которой она принадлежит,например Formi.
SomeProcedure.
Аргументы
В процедурах событий набор аргументов зависит от события и не может быть изменен разработчиком. В общих процедурах количество и порядок используемых аргументов определяется разработчиком.
Способ передачи аргументов
Для передачи аргумента по ссылке или значению перед аргументом следует указать ключевое слово ByRef. или ByVal соответственно.
По умолчанию аргументы передаются по ссылке.
Именованные аргументы
Для многих встроенных функций, операторов и методов Visual Basic обеспечивает возможность использования именованных аргументов для упрощения ввода их значений.
Использование именованных аргументов позволяет передавать часть или все аргументы в любом порядке. Для этого при вызове процедуры указывается следующая конструкция:
[{значение,..},]{имя_аргумента := значение},..
Необязательные аргументы
Перед именами необязательных аргументов ставится ключевое слово Optional. После первого необязательного аргумента все последующие должны быть также объявлены необязательными.
Необязательные аргументы могут иметь любой тип данных, за исключением пользовательских.
Функция IsMissing позволяет проверить, передан или нет аргумент тип Variant. Если некоторые необязательные аргументы не были переданы процедуре, они инициализируются значениями по умолчанию соответствующего типа данных.
Возвращаемые значения
Процедуры-функции могут возвращать и массивы. В этом случае указание типа возвращаемого значения имеет вид
As тип_данных()
Операторы управления
If...Then
Условный оператор может иметь однострочный или блочный синтаксис.
Однострочный синтаксис:
If условие Then оператор [Else оператор]
Блочный синтаксис:
If условие Then
[оператор]
…
[ElseIf условие Then
[оператор]
…]
…
[Else
[оператор]
…]
End If
Select Case
Оператор выбора имеет следующий синтаксис:
Select Case проверочное_выражение
[Case список_выражений
[оператор]
…]
…
[Case Else
[оператор]
…]
End Select
В списке выражений могут присутствовать выражения в одной из трех форм: выражение, выражение To выражение, Is операция_сравнения выражение. Здесь ключевое слово Is заменяет проверочное выражение.
For … Next
Синтаксис оператора цикла:
For счетчик =начальное_значение То конечное_значение [Step шаг]
[оператор]
…
Next [счетчик]
Шаг может быть как положительным, так и отрицательным.
Do … Loop
Оператор повторения существует в двух вариантах -
с предусловием:
Do [{While | Until} условие]
[оператор]
…
Loop
с постусловием:
Do
[оператор]
…
Loop [{While | Until} условие]
Элементы управления
Основные события
События Click и Dblclick вызываются одиночным и двойным щелчком мыши соответственно.
Событие MouseDown вызывается при нажатии кнопки мыши. При этом процедуре обработки события передается параметры, определяющие нажатую кнопку (1 - левая, 2 - правая, 4 - средняя), состояние управляющих клавиш (Shift, Ctrl, Alt) и позицию курсора в момент нажатия относительно левой верхней точки элемента управления (X, Y).
Событие Mouseup вызывается при отпускании кнопки мыши.
Событие MouseMove вызывается при движении курсора над элементом управления.
События KeyPress, KeyUp и KeyDown связаны с клавиатурой. Обычно эти события вызываются для активного элемента управления, находящегося в фокусе. Однако, если свойству формы KeyPreview присвоить значение True, то событие, связанное с клавиатурой, передается сначала форме, а затем уже активному элементу управления.
В процедуру обработки события KeyPress передается по ссылке код ASCII нажатой клавиши (не перехватываются нажатия специальных клавиш, таких как PrintScreen или Alt; нажатия клавиш Enter, Esc, Backspace перехватываются). В процедуре можно осуществить, например, фильтрацию вводимых данных и, установив значение аргумента КеyAscii равным нулю, предотвратить передачу недопустимого символа для дальнейшей обработки.
События KeyDown и KeyUp вызываются при нажатии и отпускании клавиш. Они происходят даже при нажатии специальных клавиш управления, например функциональных клавиш. При этом передаются два параметра: KeyCode и Shift. Параметр KeyCode содержит клавиатурный код (а не код ASCII) нажатой клавиши, например vbKeyFl, а параметр Shift информирует о состоянии клавиш Shift , Ctrl и Alt.
События нажатия клавиш наступают в последовательности KeyDown, KeyPress и KeyUp.
События LostFocus и GotFocus возникают при потере и получении фокуса соответственно.
Кнопка (CommanaButton)
Этот элемент управления используется для того, чтобы начать, прервать или закончить какой либо процесс. Кнопка встречается во всех приложениях Windows.
Главным событием для кнопки является Click. Кроме этого события, у кнопки могут быть и другие, но они применяются редко.
Для вызова события Click имеются разные способы. Самый простой - непосредственный щелчок н кнопке мышью. Это же событие вызывается также, если с помощью клавиши Tab переместить фокус на кнопку, затем нажать клавишу Enter. Можно программно вызвать событие Click, установив равным True значение свойства Value, доступного только во время выполнения.
Есть два интересных свойства кнопки, связанных с событием Click. Свойство Default определяет, что данная кнопка является кнопкой, активной по умолчанию. Если это свойство равно True, то нажатием клавиши Enter автоматически генерируется событие Click этой кнопки независимо от того, какой элемент имеет фокус. Присваивать значение True этому свойству можно только для одной кнопки в форме. Следует учитывать, что в этом случае нажатие клавиши Enter перехватывается и передается этой кнопке. Обычно кнопкой по умолчанию является кнопка ОК.
Свойство Cancel используется подобно Default. Оно обеспечивает перехват клавиши Esc и вызов события Click для соответствующей кнопки. Обычно это свойство имеют кнопки Cancel (Отмена).
Надпись (Label)
Надпись (Label) предназначена для отображения текста, который пользователь не может изменить с клавиатуры.
Хотя некоторые события этого элемента управления можно обрабатывать, обычно эта возможность не используется.
Самым важным свойством надписи является Caption, содержащее отображаемый текст. Воспользовавшись свойством BorderStyle, можно установить способ отображения текста - с рамкой или без нее. Оформлять текст можно, используя все возможности форматирования текста, доступные в окне свойств, - от вида и размера шрифта до цвета символов. Если текст длиннее, чем поле надписи, то оставшаяся часть текста просто не отображается (усекается).
Этого можно избежать, если присвоить значение True свойству AutoSize, что приводит размер надписи в соответствие с длиной текста. Таким же образом можно корректировать размер надписи и по вертикали. Для этого одновременно со свойством AutoSize нужно установить свойство Wordwrap. Тогда слова, не помещающиеся в строке, автоматически будут переноситься в следующую строку.
Установка в тексте надписи перед любой буквой символа амперсэнда (&) позволяет определить для выбора объекта клавишу быстрого доступа. Так как надпись не может получать фокус, она передает его следующему элементу управления. Если амперсэнд просто должен появляться в тексте без дальнейшего действия, следует отключить свойство UseMnemonic.
Текстовое поле (TextBox)
Текстовое поле (TextBox) является основным элементом управления, предназначенным для ввода данных.
При использовании текстового поля представляют интерес несколько событий. Прежде всего, это событие Change, которое вызывается при изменении содержимого текстового поля. Это событие происходит каждый раз при вводе, удалении или изменении символа. Например, при вводе в текстовое поле слов "Hello" событие Change вызывается пять раз - по одному разу для каждой буквы.
Для анализа введенного в поле текста лучше всего подходит событие LostFocus. Это событие вызывается после того, как текстовое поле становится неактивным (после передачи фокуса другому элементу, т.е. когда пользователь закончит ввод). Однако если это поле является единственным элементом управления в форме, оно не может потерять фокус.
Чтобы удалить или инициализировать содержимое текстового окна, используется событие GotFocus. Оно вызывается, когда пользователь "входит" в текстовое окно.
Можно воспользоваться и другими свойствами текстового поля. Самым важным является свойство Text. Это свойство содержит отображаемый в поле текст.
Элементы управления, которые разрешают ввод символов, имеют свойство Text, а элементы, предназначенные только для отображения текста, - свойство Caption. Текстовое поле подобно маленькому редактору. Чтобы использовать его в таком качестве, достаточно установить свойство MultiLine. Это дает возможность вводить в поле несколько строк.
В многострочном поле для перехода на новую строку можно использовать клавишу Enter. Но при этом следует помнить, что для некоторой кнопки, возможно, установлено свойство Default. Поэтому нажатие клавиши Enter вызовет срабатывание этой кнопки. В таком случае для перехода на новую строку надежнее использовать комбинацию клавиш Ctrl+Enter или Shift+Enter.
Если форма не содержит многострочное текстовое поле и кнопку по умолчанию, то нажатие клавиши Enter в текстовом поле,имеющем фокус, вызовет звуковой сигнал. Для предотвращения этого можно написать следующую процедуру обработки события KeyPress текстового поля:
Private Sub Textl_Keypress(KeyAscii As Integer)
If KeyAscii =13 Then KeyAscii = 0
End Sub
При этом клавиша Enter просто игнорируется.
При работе с многострочным текстовым полем можно столкнуться со следующей проблемой: если вводимый текст больше, чем может поместиться в текстовом поле, текст хотя и не усекается, но и не отображается полностью. Эта проблема решается установкой свойства ScrollBars. С его помощью можно определить, какую полосу прокрутки будет иметь текстовое поле: горизонтальную, вертикальную или обе. При этом полосы прокрутки функционируют самостоятельно, т.е. нет необходимости писать дополнительный код.
В текстовом поле, как это обычно делается в среде Windows, можно также выделять текст. Для этого Visual Basic предоставляет следующие три свойства текстового окна. Свойство SelStart определяет начальную позицию выделенного текста в символах. Свойство SelLength содержит количество выделенных символов. И, наконец, с помощью свойств SelText можно прочитать или изменить выделенный текст.
Иногда в поле требуется быстро удалить текст или заменить его новым. Для этого выделяется весь текст в поле, как только данное поле получает фокус.
Флажок (CheckBox)
Флажки - это элементы управления, которые можно отмечать (ставить "галочку"), выбирая из ряда опций одну или несколько. CheckBox может иметь два основных состояния - отмеченное и не отмеченное. В третьем состоянии он отображается как отмеченный, но недоступный. Установить такое состояние элемента управления можно только программно.
Важнейшим для флажка, как и для кнопки, является событие Click.
Единственным важным свойством элемента управления CheckBox является его значение (Value). В зависимости от того, отмечен флажок или нет, Value может принимать следующие значения: 0 – не отмечен, 1 – отмечен, 2 – отмечен, но недоступен.
Список (ListBox)
Список - ListBox - позволяет пользователю выбирать из списка один или несколько элементов. В любое время в список можно добавлять новые элементы или удалять существующие. Если не все элементы могут одновременно отобразиться в поле списка, то в нем автоматически отображаются полосы прокрутки.
Основное событие списка - Click. Это событие вызывается, если пользователь с помощью мыши или клавиш управления курсором выбирает элемент в списке.
Окно списка - это элемент управления, для которых важную роль играют методы. Методы списка необходимы для обработки элементов списка - добавления или удаления. Для добавления новых элементов используется метод Addltem. Для удаления элемента из списка используется метод RemoveItem, которому в качестве параметра передается индекс удаляемого элемента .Индексация элементов списка начинается с 0. Для удаления всех элементов списка используется метод Clear:
Использование свойства списка Text - самая простая возможность получить текст выбранного элемента списка. В любой момент времени значение этого свойства содержит текст выбранного элемента списка или пустую строку, если ни один элемент не выбран. Для определения текста выбранного элемента существуют и другие возможности. Однако следует помнить, что и в памяти все элементы списка сохраняются в виде списка. При этом первый элемент списка имеет индекс 0. Зная это, можно воспользоваться свойством списка List(), которое позволяет определить текст элемента списка по его индексу. Комбинируя свойства List() и Listlndex, можно получить выбранный элемент списка. Если в списке не выбран ни один элемент, значение свойства Listlndex равно 1. Текущее количество элементов в списке сохраняется в свойстве ListCount.
Элементы поля списка по умолчанию отображаются в одном столбце. Во время проектирования, при необходимости, их число можно изменить с помощью свойства Columns. Заполнение столбцов в этом случае осуществляется последовательно – сначала заполняется первый, затем второй и т.д.
Свойство Sorted определяет способ расположения элементов в списке. Если установить это свойство, то все элементы будут сортироваться по алфавиту, даже если они были добавлены с указанием индекса. Индекс последнего добавленного элемента содержит свойство NewIndex. Это свойство связано с другим свойством списка – ItemData(), с помощью которого каждому элементу списка можно поставить в соответствие число тип Long. Используя это свойство, можно составить, например, список сотрудников, сохранив их индивидуальные номера в свойстве ItemData().
При добавлении в список нового элемента следует позаботиться о присвоении (при необходимости) требуемого значения свойству ItemData(), так как оно изначально не инициализировано соответствующим значением ранее добавленного элемента.
Пользователь может выбирать одновременно несколько элементов списка. Для этого следует присвоить свойству Multiselect одно из следующих значений:
· 0 - Множественный выбор невозможен. Щелчком мыши или нажатием клавиши пробела в списке можно выбрать только один элемент.
· 1 - Простой множественный выбор. Элементы списка выбираются щелчком мыши или нажатием клавиши пробела.
· 2 - Расширенный множественный выбор. Пользователь может выбрать несколько элементов с помощью мыши или клавиш управления курсором с использованием клавиш Shift и Ctrl.
При множественном выборе свойство Text содержит текст последнего выбранного элемента списка. Значение свойства Selected() элемента списка показывает, выделен данный элемент списка или нет. Если свойство равно True, то данный элемент выбран.
Поле со списком (ComboBox)
Поле со списком или ComboBox - это, по сути, комбинированный список, который представляет собой комбинацию двух элементов управления – самого списка со значениями и поля ввода текста (текстового поля). Поля со списком используются в том случае, если нельзя заранее определить значения, которые следует включить в список, или список содержит слишком много элементов. В таком списке нужное значение можно не только выбирать, но и вводить непосредственно в поле ввода. Новое значение после ввода автоматически помещается в список.
Для поля со списком важную роль играют события как поля ввода, так и списка. Основные из них - Click, используемое для выбора элемента списка, и Change - для изменения записи в поле ввода текста.
Поле со списком имеет почти все свойств текстового поля TextBox и списка ListBox (исключением является свойство MultiLine). Однако особо следует выделить значение свойства Style, определяющее внешний вид и функционирование поля со списком:
· 0 = vbComboDropDown - Значение по умолчанию. ComboBox представляет собой текстовое поле для редактирования и открывающийся список.
· 1 = vbComboSimple - ComboBox представляет собой текстовое поле и постоянно открытый список.
· 2 = vbComboDropDownList - Отличается от списка со значением vbComboDropDown только тем, то пользователь не может вводить текст в текстовое поле.
Таймер (Timer)
Использование таймера является хорошим способом управления программой. С помощью таймера можно запускать или завершать процессы приложения в определенные моменты времени. Таймер может быть полезным и в том случае, если приложение выполняется в фоновом режиме. Во время проектирования таймер отображается в форме ,но во время выполнения программы он является невидимым.
Таймер имеет единственное событие - Timer, которое вызывается по истечении установленного временного интервала.
Для установки интервала времени служит свойство Interval, значение которого устанавливается в миллисекундах. Например, задание значения 250 вызывает событие Timer через каждые 250 миллисекунд независимо от того, какое приложение активно. Для отключения таймера следует присвоить свойству Interval значение 0 или свойству Enabled значение False.
Максимально допустимый интервал составляет 64757 миллисекунд. Но следует помнить, что операционная систем может обрабатывать только 18,2 прерывания таймера в секунду, поэтому точность задания интервала составляет максимум одну восемнадцатую секунды. Необходимо также учесть, что при большой загрузке системы (поддержка сети, печать и т.п.) прерывания могут обрабатываться еще реже.
В Windows можно использовать не более 32 таймеров. Поскольку для работы системы также нужен таймер, то для всех приложений остается максимум 31.
Если обработка события Timer длится дольше, чем задано значением Interval, то новое событие Timer не вызывается, пока Visual Basic не обработает это событие.
Список файлов (FileListBox)
FileListBox - последний элемент управления, который можно использовать для выбор файлов. Он отображает файлы текущего каталога, откуда их можно выбирать.
Для FileListBox основным событием является Click, которое вызывается при выборе пользователем имени файла в списке. Представляют также интерес события PathChange и PatternChange. Событие PathChange происходит после изменения пути (свойство Path), а событие PatternChange после изменения маски выбора файлов (свойство Pattern).
Этот элемент управления также имеет много общих свойств с элементом ListBox. Однако основным его свойством является свойство FileName, которое содержит имя выбранного файла (например,BOOK.DOC). Свойство Pattern позволяет определить тип тех файлов, которые должны отображаться в списке. Например, для отображения файлов с расширением *.1СО и *.ВМР необходим следующий код:
Filel.Pattern = "*.ICO;*.BMP"
Расширения файлов разделяются точкой с запятой.
Список файлов также должен синхронизироваться с выбранными устройствами и каталогом. Это происходит при обработке события Change для DirListBox. При этом используется свойство Path элемента FileListBox:
Private Sub Dirl Change()
Filel.Path = Dirl.Path
End Sub
Так как элемент DirListBox уже синхронизирован с выбором диска, все три элемента теперь работают вместе.
Для отображения полного имени файла, включая путь, нужно просто сложить соответствующие строки, содержащие значения имени диска, пути и имени файла. Поместить символ ”\”между путем и именем файла достаточно просто. Это выполняется следующим оператором:
IblPath.Caption =Filel.Path &”\”&Filel.Filename
Чтобы избежать отображения в пути излишнего количества символов "\",
например в случ е выбора файла корневого каталога,нужно немного изменить
код:
Private Sub Filel_Click()
If Right(Filel.Path,1)=c Then
IblPath.Caption = Filel.Path & Filel.Filename
Else
IblPath.Caption = Filel.Path & ”\” & Filel.Filename
End If
End Sub
Рамка (Frame)
Рамка (Frame) - это один из элементов контейнеров. Его назначение - объединить в группу несколько элементов управления. Объекты, объединенные с помощью рамки, можно как единое целое перемещать, активизировать и деактивизировать, делать видимыми или невидимыми. Некоторые элементы сами нуждаются в контейнере - например, все переключатели в форме всегда объединяются в одну группу. Чтобы создать вторую группу опций, нужно требуемые переключатели объединить в элементе контейнере.
Для объединения объектов в группу нужно сначала создать элемент контейнер, затем добавить в него нужные элементы управления. Если требуемые элементы управления уже находятся в форме, их достаточно переместить в элемент контейнер. Чтобы проверить, действительно ли элемент принадлежит контейнеру, достаточно переместить контейнер. Элемент управления, принадлежащий контейнеру, будет перемещаться вместе с ним.
Рамка - это элемент управления, который не имеет особых свойств, присущих только ей.
События рамки обычно не анализируются, так как чаще всего проектировщик работает только с элементами управления, принадлежащими рамке.
Изображение (Image)
Элемент управления Image также создан для отображения рисунков. Но в отличие от PictureBox, он не является элементом контейнером. Он не позволяет рисовать и не допускает группирования объектов. Однако Image использует меньше ресурсов и перерисовывает быстрее, чем PictureBox. Поэтому для отображения рисунков Image может быть лучшим вариантом.
Так как главное назначение Image — отображение рисунков, его события обычно не анализируются.
Главным свойством Image также является Picture. С его помощью можно определить рисунок, отображаемый элементом управления, на стадии проектирования либо при выполнении программы. Свойство Stretch определяет, как отображается рисунок. Если значение свойства Stretch равно True, то размеры рисунка изменяются до размеров элемента управления Image, в противном случае элемент управления изменяется до размера рисунка.
Горячие клавиши
Горячие клавиши (hot key) можно назначить почти всем элементам управления, имеющим свойство Caption. Их можно определять в Caption путем добавления знака амперсэнда (&) перед соответствующей буквой. Несмотря на то, что текстовое поле не имеет свойства Caption, для него также можно определить горячую клавишу. Для этого нужно добавить элемент управления Label перед текстовым окном и определить для него горячую клавишу. Затем следует присвоить свойству Tablndex элемента управления Label значение на единицу меньше, чем для такого же свойства текстового поля.
Свойство Tablndex
С помощью клавиши Tab в Windows можно передавать фокус от одного элемента другому. Свойство Tablndex элемента управления устанавливает последовательность перехода при нажатии клавиши Tab. Значение индекса 0 присваивается свойству Tablndex элемента управления, который помещается в форму первым. Visual Basic автоматически увеличивает это свойство. Это значит, что каждый новый