Текстовые окна

Вы уже имели дело с текстовыми окнами, пользуясь инструментом Text Box (рис. 5-7). И, если коротко, текстовые окна (text boxes) — это экранные области, в которые можно вводить текст. ,

Свойства

Текстовые окна, наряду со стандартными свойствами (BorderStyle, Enabled, FontBold, Fontltalic, FontName, FontSize, FontUnderline, Height, Left, Name, Top, Visible и Width), обладают еще и такими:

MaxLength (Максимальная длина) Оно обычно равно 0 (по умолчанию), т. е. в текстовое окно можно вводить любое количество символов. Если установить значение, не равное 0, Visual Basic ограничит возможность ввода до заданного количества символов.

Multiline (Несколько строк) Чаще всего это свойство приравнивают False, что запрещает ввод более одной строки текста. Установив True, можно вводить по несколько строк, нажимая клавишу Enter (т. е. вставлять в текст символ возвра­та каретки) и продолжая набор текста с новой строки.

PasswordChar (Символ пароля) Это свойство определяет: защищено данное текстовое окно паролем или нет. Если текст ввести в защищенное паролем окно, символы на экране будут отличаться от набираемых на клавиатуре. По

"' умолчанию свойство PasswordChar соответствует пустой строке, а это значит: какие символы пользователь вводит, такие символы он и видит. Если же свой­ство PasswordChar приравнять какому-нибудь символу (допустим, звездочке), на экране вместо набираемых знаков появятся звездочки. Но пусть это Вас не

смущает. На самом деле содержимое текстового окна соответствует введенно­му тексту — звездочки высвечиваются только на дисплее.

НЕ нашли? Не то? Что вы ищете?

ScrollBars (Линейки прокрутки) Этому свойству можно присвоить О (линеек прокрутки в текстовом окне нет), 1 (появляется только горизонтальная линей­ка прокрутки), 2 (появляется только вертикальная линейка прокрутки) или 3 (видны обе линейки).

Sel Length (Количество выделенных символов) Это свойство определяет количе­ство символов, выделенных в данный момент. Его значение меняется при вы­делении знаков в текстовом окне. То же самое можно сделать программным путем, присвоив свойству нужную величину (целого типа), и, кстати, изменить тем самым размер выделенного фрагмента. Свойства SelLength, SelStart и SelText доступны только при выполнении программы.

SelStart (Начало выделенного блока) Параметр, указанный в этом свойстве, оп­ределяет, откуда начинается выделенный фрагмент текста: с первого символа (0), со второго (1) и т. д. Свойство SelStart тоже допускается модифицировать программным путем.

SelText (Выделенный текст) Это свойство содержит текстовую строку, соответ­ствующую выделенному в данный момент фрагменту. Если текст не выделен, свойство SelText содержит пустую строку. Устанавливая данное свойство в коде программы, Вы заменяете выделенный в текстовом окне фрагмент новым значением SelText. Например, если в текстовом окне с именем Textl набрана строка: "Честно говоря, доррогая, мне все до лампочки" и слово доррогая вы­делено, его можно исправить, выполнив оператор Text1.SelText = "дорогая". Заметьте: это приведет и к изменению свойства SelLength, тогда как значение свойства SelStart не меняется, поскольку начало выделенного блока сохраняет­ся прежним.

Text (Текст) Программа распознает с помощью этого свойства, какой именно текст введен пользователем. Кроме того, оно позволяет изменять отображае­мый на экране текст.

События

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

Change (Изменение) Сигнал об этом событии поступает в программу при из­менении свойства Text пользователем (при вводе нового текста) или програм­мой, устанавливающей новое значение этого свойства. Обратите внимание: если Вы набираете слово Привет, сигнал о событии Change поступает' шесть раз — по одному на каждую букву.

LostFocus (Уход из фокуса) Это событие возникает при перемещении пользова­телем курсора ввода за пределы данного текстового окна или начале работы с мышью над какими-нибудь другими объектами на форме. Проверять значение

свойства Text эффективнее в процедуре обработки события LostFocus, а не Change.

Процедуры и методы

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

[объект.]SetFocus

Приложение NoteEdit

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

Откройте новый проект. Присвойте строку NoteEdit свойствам формы Caption и Name. Создайте на форме текстовое окно и установите следующие его свойства:

Свойство Значение

MultiLine True

Name txtBox

ScrollBars 3 — Both

Text [нет]

Текстовое окно поддерживает ввод и редактирование текста без всякого вмеша­тельства с Вашей стороны. Лишь запустите приложение — и работайте над текс­том: вырезайте, копируйте и вставляйте с помощью стандартных для Windows комбинаций клавиш: Ctrl+X, Ctrl+C и Ctrl+V.

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

Эта процедура выполняется при изменении размеров и при первом появлении формы на экране. Присваивая нулевые значения свойствам текстового окна Тор и Left, Вы получаете гарантию того, что его левый верхний угол всегда будет нахо­диться в левом верхнем углу формы (см. рис. 5-8). Свойства текстового окна Width и Height сопоставлены со свойствами формы ScaleWidth и ScaleHeight (они определяют размер области вывода на форме).

Списки

Список (list box) — перечень вариантов, выбираемых щелчком мыши. Включен­ный в список вариант называется элементом списка (list entry). В слишком длин­ный список, который не выводится на экран целиком, Visual Basic добавляет ли­нейки прокрутки (scroll bars). Для корректной работы с объектом типа "список" необходимо, чтобы его высота была минимум три строки. Если Вы собираетесь включить список в форму, выберите из окна шаблонов инструмент List Box (см. рис. 5-16). раскрывающиеся списки (drop-down list boxes) — вроде того, что Вы видите в поле параметров окна Properties, — это один из вариантов так называе­мых комбинированных списков (combo boxes);

Содержимое списка нельзя задать на этапе проектирования. Чтобы ввести в него элемент, программе необходим метод Addltem. Инициализацию списка лучше проводить в процедуре обработки события Load — она принадлежит форме, со­держащей этот список.

Свойства

Объекты "список" поддерживают ряд стандартных свойств: Enabled, FontBold, Fontltalic, FontName, FontSize, FontUnderline, Height, Left, Name, Top, Visible и

Width. В то же время они обладают некоторыми специфическими свойствами, которые мы и рассмотрим.

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

List (Список) Это свойство (его нельзя модифицировать при проектировании) представляет собой массив, состоящий из элементов списка. Доступ к отдельным элементам списка в этом свойстве обес­печивает такая форма записи:

объект.List (индекс)

ListCount (Количество элементов в списке) Это свойство, содержащее количест­во элементов в списке, нельзя изменять напрямую.

Listlndex (Индекс текущего элемента в списке) Значение этого свойства соот­ветствует номеру последнего выделенного подсветкой элемента списка. Ин­декс первого элемента в списке — 0, второго — 1 и т. д. При отсуствии выделенных подсветкой элементов, свойство приравнивается -1. Установка Listlndex программным путем приводит к подсвечиванию элемента с указан­ным индексом. Содержимое выделенного элемента можно выяснить с помо­щью свойства Text.

MultiSelect (Множественное выделение) Это свойство определяет, сколько элементов можно одновременно выделить в списке. Если оно равно нулю (О — None), допускается выделение лишь одного элемента (т. е. множественное выделение запрещено). При значении 1 — Simple в списке разрешается выде­лять сразу несколько элементов. И, наконец, значение 2 — Extended позволяет ускоренно выделять группу элементов (для этого щелкните первый элемент группы, а затем, удерживая клавишу Ctrl, — последний элемент). Кроме того, в этом режиме пользователь может включать в группу или убирать из нее от­дельные элементы щелчком мыши при нажатой клавише Ctrl. Но при выделе­нии даже нескольких элементов свойства Listlndex и Text возвращают лишь те значения, что соответствуют последнему выбранному элементу. Разобраться же в том, какие элементы были выделены в списке, Вам поможет свойство Se­lected.

Selected (Признак выделения) Это свойство представляет собой массив, в кото­ром для каждого элемента списка хранятся значения либо True (данный эле­мент выделен), либо False (данный элемент не выделен). Чтобы проверить ста­тус конкретного элемента, укажите его индекс:

Sorted (Сортировка) Если Вы хотите, чтобы элементы в списке располагались по алфавиту, установите это свойство как True. При значении False (по умолча­нию) элементы хранятся в списке в том порядке, в котором они были введены. Имейте в виду: сортировка русского текста не предусмотрена.

Text (Текст) Это свойство (его нельзя модифицировать напрямую) содержит текст последнего выделенного элемента списка.

События

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

Процедуры и методы

Наиболее распространенные методы, применяемые для списков, — AddItem,
Clear и RemoveItem. Они позволяют при выполнении программы модифициро­
вать содержимое списка. • • • •

Addltem Этот метод включает элемент в список. При этом Вы вводите строку текста и — что необязательно — индекс добавляемого элемента. Если Вы не укажете индекс, Visual Basic поставит элемент в конец списка. Однако, если свойство Sorted равно Тше, не дополняйте строку текста индексом — элемент будет размещен в соответствии с алфавитным порядком. Вот как выглядит синтаксис метода AdcUtem:

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

oбъeкm. RemoveItem индекс

Приложение Cheese

В этом проекте-примере мы реализуем перенос элементов из одного списка в другой. В первом списке элементы сортируются по алфавиту, во втором — распо­лагаются в порядке поступления.

Начнем с создания нового проекта. Нарисуйте на форме два списка, как показа­но на рис. 5-17, и присвойте значение True свойству Sorted правого списка (List2). А остальная часть программы — код (см. рис. 5-18). Процедура Form_Load инициализирует список. Процедуры Listl_DblClick и List2_DblClick почти одина­ковы — они различаются лишь тем, что переносят элементы в противополож­ных направлениях.

Двойной щелчок любой строки в одном из списков — и этот элемент перемеща­ется в другой список При этом в списке List2 элементы сортируются по алфавиту, а в списке List 1 — располагаются в том порядке, в каком были добавлены.

Комбинированные списки

Комбинированный список (combo box) создается инструментом Combo Box (см. рис. 5-19). Он назван так потому, что, объединяя текстовое окно (здесь оно на­зывается полем ввода) с обычным списком, образует единый элемент управления. Однако, в отличие от обычного, комбинированный список не позволяет разме­щать элементы в несколько колонок. Модифицируя его свойство Style, Вы выби­раете один из трех режимов работы.

Свойства

Комбинированные списки обладают, кроме обычных, еще двумя интересными свойствами: Style и Text.

Style (Тип) Это свойство, определяющее тип комбинированного списка и ре­жим его работы, принимает три значения: 0, 1 или 2.

Когда свойство Style равно 2, комбинированный список преобразуется в рас­крывающийся список (drop-down list box). Изначально такой элемент управ­ления отображает лишь одну строку, но, щелкнув указывающую вниз стрелку (она на правой стороне объекта), Вы откроете весь список, в котором можно выбрать один из элементов — так же, как и в обычном списке. За примером далеко ходить не надо — взгляните на список Object в окне Properties.

Значение 1 позволяет получить то, что обычно называют простым комбини­рованным списком: поле ввода, в котором можно набирать текст, и стандарт­ный список, расположенный под этим полем. Список не раскрывается, а по­казывается в окне постоянного размера. Таким образом, пользователь либо вводит текст в поле, либо выбирает элемент из списка.

Присвоив нулевое значение свойству Style, Вы создадите раскрывающийся комбинированный список (drop-down combo box), который выглядит так же, как и раскрывающийся, но, в отличие от последнего, позволяет и выбирать элемент, и вводить текст. Пример такого списка тоже перед Вами: посмотрите на поле параметров в окне Properties.

Процедуры и методы

Методы Addltem, Clear и Removeltem, применяемые к обычным спискам, с комби­нированными работают точно так же.

Приложение Flight

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

1. Создайте новый проект. Разместите на форме три метки и две командные кнопки, установив соответствующие значения свойств Caption у каждого объ­екта, — чтобы форма выглядела, как показано на иллюстрации:

2. Введите значения True в свойство Default кнопки ОК и свойство Cancel кнопки Отмена.

3. Под меткой Пункт назначения нарисуйте комбинированный список и уста­новите его свойства следующим образом: Style — 1, Name — cboDest. Окно списка должно быть таким, чтобы в нем умещалось четыре-пять строк

4. Под меткой Расположение кресел создайте другой комбинированный список со следующими свойствами: Style — 2, Name — cboSeat.

5. И последний список разместите под меткой Вид питания. Свойство Style приравняйте нулю, а свойство Name — cboMeal. После этого форма должна выглядеть так:

6. Теперь Вам нужно написать две процедуры: одна будет реагировать на щелчок командной кнопки ОК, другая — инициализировать комбинированные спис­ки. Последнюю разместим в процедуре Form_Load. Текст программы представ­лен на рис. 5-20.

Запустив это приложение, обратите внимание на то, какой из трех комбиниро­ванных списков позволит Вам вводить текст. Заметьте, кстати, что по внешнему виду списки разного типа заметно отличаются друг от друга (см. рис. 5-21).

Линейки прокрутки

Горизонтальные и вертикальные линейки прокрутки (scroll bars), показанные на рис. 5-22, действуют совершенно одинаково — разве что в разных направле­ниях. Эти объекты позволяют узнавать о позиции движка (scroll box) на линейке, а кроме того — контролировать диапазон действия линейки прокрутки и дискретность перемещения движка. Например, если Вы с помощью линейки прокрутки моделируете педаль газа в автомобиле, имеет смысл задать диапазон от 0 до 100 с ценой деления в 5 единиц. А если Вы, допустим, программируете регулятор громкости, можно задать диапазон от О до 10 с шагом в единицу.

Для создания этих объектов служат два инструмента, расположенные в окне шаб­лонов: Horizontal Scroll Bar (рис. 5-23) и Vertical Scroll Bar (рис. 5-24).

Свойства

Стандартные свойства, поддерживаемые объектами типа "линейка прокрутки", включают: Enabled, Height, Left, Name, Top, Visible и Width. К их специфическим свойствам относятся LargeChange, Max, Min, SmallChange и Value.

LargeChange (Постраничное изменение) Это свойство определяет величину, которая добавляется или вычитается из значения свойства Value при щелчке внутри линейки прокрутки.

Мах (Максимум) Значение этого свойства может находиться в интервале от до 32 7б7. Когда движок попадает в крайнюю правую или нижнюю позицию, это число присваивается свойству Value.

Min (Минимум) Значение этого свойства может находиться в интервале от до 32 7б7. Когда движок попадает в крайнюю левую или верхнюю по­зицию, это число присваивается свойству Value.

SmallChange (Построчное изменение) Это свойство определяет величину, до­бавляемую или вычитаемую из значения свойства Value при щелчке одной из стрелок, указывающих направление прокрутки и расположенных на концах ли­нейки.

Value (Текущая позиция) Это свойство содержит число, которое отражает теку­щую позицию движка на линейке прокрутки. При изменении свойства Value программным путем Visual Basic перемещает движок в соответствующую пози­цию. Если значение свойства Value выходит за пределы, установленные свой­ствами Min и Мах, сообщается об ошибке.

События

К наиболее важным событиям, связанным с линейками прокрутки, относят Scroll (Прокрутка) и Change (Изменение). Событие Scroll непрерывно генерируется при перемещении (мышью) движка по линейке. Событие Change возникает после изменения позиции движка. Таким образом, событие Scroll позволяет динамичес­ки отслеживать позицию движка на линейке прокрутки, a Change — определять его конечное положение.

Процедуры и методы

Все ранее рассмотренные процедуры и методы неприменимы к объектам типа "ли­нейка прокрутки".

Приложение Scroll Bar

В этом проекте мы просто понаблюдаем за работой линеек прокрутки.

1. Создайте новый проект. Поместите на пустую форму поле метки и горизон­тальную линейку прокрутки — как показано ниже:

2. Введите в свойство метки BorderStyle значение 1 — Fixed Single, а ее свойство Caption приравняйте пустой строке. Теперь выделите горизонтальную линейку прокрутки и "настройте" ее свойства следующим образом:

Свойство Значение

LargeChange 10

Max 100

Min 0

SmallChange 2

3. Дважды щелкнув линейку, откройте окно кода и составьте процедуру обра­ботки события Change:

Поскольку свойство метки Caption способно воспринимать только строковые значения, придется с помощью функции Str$ преобразовывать величину HScroll Value в строку.

4. Наберите текст процедуры для обработки события Scroll:

Теперь запустите приложение. При щелчках серой области линейки прокрутки значения, отображаемые строкой метки, будут изменяться с шагом в 10 единиц. А при щелчках стрелок на концах линейки — с шагом в 2 единицы.

Перемещая движок мышью, можно регулировать "показания" метки с произ­вольной дискретностью, а не только 2 или 10. Например, число, показанное на рис. 5-25, можно получить лишь двумя способами: щелчками стрелок или пере­мещением движка. Заметьте: процедура обработки события Scroll непрерывно обновляет строку метки при перемещении движка.