Назначение клавиш ускоренного вызова для надписей

Клавишами ускоренного вызова называются сочетания типа Alt+клавиша. Нажимая Alt вместе с подчеркнутой буквой текстового элемента, пользователь может быстро перейти к нему. Клавиши ускоренного вызова можно назначать лишь тем элементам, у которых есть свойство Caption, например кнопкам или командам меню. Многие элементы (например, текстовые поля) не имеют свойства Caption, поэтому вы не сможете быстро перейти к ним с клавиатуры — приходится перебирать элементы клавишей Tab до тех пор, пока не найдете нужный.

Возможный выход из положения заключается в том, чтобы поместить надпись перед нужным элементом. Проследите за тем, чтобы свойство Tablndex надписи было на единицу меньше свойства того элемента, к которому относится надпись. Вставьте символ «амперсенд» (&) в свойство Caption надписи перед символом, определяющим клавишу ускоренного вызова.

Продемонстрируем сказанное на примере:

1. Откройте проект Controls.vbp, если он не был открыт ранее.

2. Дважды щелкните на форме frmText в окне проекта, чтобы активизировать ее.

3. Щелкните на текстовом поле txtDisplay, расположенном в левой верхней части формы, и найдите его свойство Tablndex в окне свойств. Значение этого свойства должно быть равно 0, чтобы элемент стал первым в порядке перебора.

4. Поместите на форму надпись и расположите ее над полем txtDisplay. В окне свойств задайте ее свойству Name значение IblDisplay. Задайте свойству Caption значение Dis&play. He забудьте про амперсенд перед буквой Р.

5. Свойство Tablndex надписи IblDisplay должно иметь значение 11. Установите его значение в 0.

6. Запустите программу командой Run > Start.

7. На форме Control Example нажмите кнопку Text Button.

8. На форме Text Box Properties нажмите кнопку Reset, чтобы убрать фокус с поля txtDisplay.

9. Нажмите клавишу Alt и, не отпуская ее, клавишу Р.

Если теперь одновременно нажать Alt и подчеркнутую букву, фокус перейдет к надписи. Тем не менее при просмотре свойств, событий и методов надписей (см. далее) оказывается, что у надписей нет свойства TabStop, событий GotFocus или LostFocus или метода SetFocus. Это означает, что передать фокус надписи невозможно, следовательно, при передаче фокуса надписи с клавишей ускоренного вызова на самом деле фокус передается следующему элементу.

Свойства надписей

Мы уже встречались с некоторыми свойствами надписей. Ниже перечислены все свойства этого элемента:

Alignment DataSource Height Parent
Appearance DragIcon Index RightToLeft
AutoSize DragMode Left Tablndex
BackColor Enabled Linkltem Tag
BackStyle Font LinkMode ToolTipText
BorderStyle FontBold LinkNotify Top
Caption FontItalic LinkTimeout UseMnemonic
Container FontName LinkTopic Visible
DataChanged FontSize MouseIcon WhatsThisHelpID
DataField FontStrikethru MousePointer Width
DataFormat FontUnderline Name Wordwrap
DataMember ForeColor OLEDropMode  


На всякий случай напомню, что самым важным свойством из всего набора (как обычно) является свойство Name. Для имен надписей обычно используется префикс 1bl. Свойство Caption определяет текст, который содержится в надписи. Если в нем встречается амперсенд (&), создается клавиша ускоренного вызова. Возникает интересный вопрос — а что произойдет, если амперсенд должен присутствовать в тексте надписи? Амперсенд не отображается на экране; он остается скрытым, а следующий за ним символ подчеркивается.

ПОДСКАЗКАЕсли вы хотите, чтобы амперсенд присутствовал в тексте надпи-си, задайте свойству UseMnemonic значение False (по умолчанию оно имеет значение True). Под «мнемоникой» (mnemonic) в данном контексте понимаются клавиши ускоренного доступа.

Размеры надписи задаются в режиме конструирования. Если изменить свойство Caption в режиме выполнения, может оказаться, что текст слишком велик и не помещается внутри элемента. Можно вычислить длину текста и изменить размеры надписи в соответствии с ней, однако это довольно хлопотно, к тому же увеличенная надпись может закрыть другие элементы. Чтобы упростить задачу, воспользуйтесь свойствами AutoSize или Wordwrap совместно или по отдельности. В этом случае текст заведомо помещается внутри надписи, и к тому же вы можете распорядиться, чтобы надпись увеличивалась по вертикали, а не по горизонтали.

У надписей имеется еще одно интересное свойство — BorderStyle. He путайте его с одноименным свойством форм, в данном случае свойство может принимать всего два значения. Если установить значение свойства BorderStyle в 1 — Fixed Single, a BackColor — в белый (или любой другой) цвет, надпись будет выглядеть как текстовое поле, но останется доступна только для чтения. Надписи часто используются подобным образом для отображения данных, которые не могут изменяться пользователем.

События надписей

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

Список включает многие стандартные события. Обратите внимание на то, что в нем отсутствуют события Key..., — это объясняется тем, что надпись не может получить фокус. События Mouse,., поддерживаются, потому что ничто не мешает вам щелкнуть на надписи во время выполнения программы. Хотя вы можете щелкнуть на элементе, это еще не значит, что ему будет передан фокус. События Link... отсутствуют почти во всех элементах, за исключением текстовых и графических полей. Эти события относятся к обмену данными через DDE (протокол динамического обмена данными). События Key... и Mouse... рассматриваются в уроке 11, «Работа с мышью».

Change LinkClose MouseMove OLEGiveFeedback
Click LinkError MouseUp OLESetData
DblClick LinkNotify OLECompleteDrag OLEStartDrag
DragDrop LinkOpen OLEDragDrop  
DragOver MouseDown OLEDragOver  

Методы надписей

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

Drag LinkRequest OLEDrag ZOrder
LinkExecute LinkSend Refresh  
LinkPoke Move ShowWhatsThis  

Методы надписей не приносят особой пользы, хотя метод LinkRequest иногда применяется для обновления неавтоматических DDE-связей.

Работа с надписями

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

1. Дважды щелкните на форме frmMain в окне проекта, чтобы активизировать ее.

2. Поместите надпись в нижнюю часть формы. Растяните ее почти на всю ширину формы.

3. Задайте ее свойству Name значение lblHelp, а в свойство Caption занесите текст

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

4. На рис. 3.5 показано, как выглядит главная форма приложения после запуска.

Назначение клавиш ускоренного вызова для надписей - student2.ru

Рис. 3.5. Надпись на форме

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

Назначение клавиш ускоренного вызова для надписей - student2.ru Переключатели (см. рисунок) позволяют выбрать один (и только один!) вариант из группы. Обычно они группируются в рамках (см. далее в этой главе), однако их также можно группировать прямо на форме, если используется только одна группа переключателей. Например, если рамка служит для выбора способа доставки, в ней может находиться один переключатель для UPS (United Parcel Service) и другой — для курьерской почты. Товар может быть доставлен лишь одним из этих способов (но не двумя сразу). С другой стороны, создавать переключатели для выбора начертания текста (полужирный, курсив) было бы бессмысленно -текст может быть полужирным и курсивным или не быть ни тем, ни другим.

Свойства переключателей

Переключатели обладают множеством свойств, перечисленных далее.

Alignment FontSize Picture
Appearance FontStrikethru RightToLeft
BackColor FontUnderline Style
Caption ForeColor Tablndex
CausesValidation Height TabStop
Container HelpContextID Tag
DisabledPicture hWnd ToolTipText
DownPicture Index Top
DragIcon Left UseMaskColor
DragMode MaskColor Value
Enabled MouseIcon Visible
Font MousePointer WhatsThisHelpID
FontBold Name Widht
FontItalic OLEDropMode  
FontName Parent  

И снова самым важным оказывается свойство Name; имена переключателей обычно снабжаются префиксом opt. Свойство Caption помогает пользователю определить, для чего предназначен переключатель. Популярное свойство Value чрезвычайно полезно как в режиме конструирования, так и в режиме выполнения. В режиме выполнения можно проверить его значение и определить, в каком состоянии (установленном или снятом) находится переключатель. Свойство Value может принимать два значения: True и False. В режиме конструирования разрешается установить значение свойства Value одного из элементов в True — по умолчанию принимается значение False. Тогда этот (и только этот!) переключатель в данной группе будет установлен при открытии формы. Если задать значение True для свойства Value другого переключателя группы, предыдущий переключатель автоматически снимается. В версии 6 у переключателей появилось новое свойство Style. При стандартном значении (0 - Standard) рисуется обычный переключатель, похожий на тот, что изображен в начале этого раздела. Задавая значение 1 - Graphical, вы добьетесь того, что переключатель будет выглядеть как обычная кнопка, но при этом из группы все равно можно будет выбрать лишь одну кнопку.

ПОДСКАЗКАЕсли вы хотите предоставить в распоряжение пользователя несколько кнопок, из которых он может выбрать лишь одну, установите свойство Style переключателей в 1 - Graphical. Чтобы вывести на кнопке графическое изображение, задайте значение свойства Picture.

События переключателей

Из нескольких событий, связанных с переключателями, реально используется только событие Click.

Click KeyDown MouseMove OLEGiveFeedback
DblClick KeyPress MouseUp OLESetData
DragDrop KeyUp OLECompleteDrag OLEStartDrag
DragOver LostFocus OLEDragDrop Validate
GotFocus MouseDown OLEDragOver  

Обычно в программах проверяется свойство Value — по нему можно узнать, в каком состоянии находится переключатель. Определив состояние, приложение выполняет необходимые действия. Чаще всего свойство Value проверяется в процедуре события Click кнопки, нажатой после установки нужного переключателя. Это позволяет проверить перед вызовом следующей процедуры некоторое условие с помощью конструкций If... End или Select Case... End Select. Тем не менее в некоторых ситуациях действие должно выполняться сразу после установки переключателя, и тогда приходится перехватывать событие Click. Рассмотрим следующий пример:

1. Запустите проект Controls командой Run > Start.

2. Нажмите кнопку Option Buttons на форме Control Examples.

3. Щелкните на любом переключателе и посмотрите на надпись в верхней части формы. Свойство Caption надписи изменяется в процедуре события Click соответствующего переключателя.

4. После просмотра результатов закройте диалоговое окно кнопкой Close.

5. Завершите приложение кнопкой Exit на форме Control Examples.

Чтобы просмотреть код данного примера, выполните следующие действия:

1. Дважды щелкните на форме frmOptions в окне проекта, чтобы активизировать ее.

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

Private Sub opt486_Click()

‘присвоить значение строковой переменной

strComputer = "486"

‘вызвать подпрограмму

Call DisplayCaption

End Sub

Процедура события Click сначала присваивает переменной strComputer значение 486, а затем вызывает другую процедуру, которая изменяет текст надписи. 3 Выберите строку (General) из списка в левой верхней части окна (он называется списком объектов). Затем выберите строку (DisplayCaption) из списка процедур в правой верхней части окна. В окне программы появляется код процедуры DisplayCaption:

Sub DisplayCaption()

' объединить текст надписи с двумя строковыми переменными

lblDisplay. Caption = "Вы выбрали компьютер" & _

strComputer & "с системой" & strSystem

End Sub

Обратите внимание — свойство Caption надписи lblDisplay задается именно в этой процедуре, вызываемой из процедуры Click каждого переключателя.

Методы переключателей

В Visual Basic методы переключателей почти не используются.

Drag OLEDrag SetFocus ZOrder
Move Refresh ShowWhatsThis  

По этой причине мы обойдемся без подробных объяснений.

Откройте и запустите приложение Control.vbp. Нажмите кнопку Option Buttons - открывается диалоговое окно Options (рис. 3.6).

Назначение клавиш ускоренного вызова для надписей - student2.ru

Рис. 3.6. Диалоговое окно Options

Пять переключателей делятся на две группы. Переключатели 486, Pentium и Pentium Pro принадлежат одной группе и располагаются прямо на форме, а переключатели Windows 95 и Windows NT принадлежат другой группе и располагаются в группе операционная система. Рамка отделяет группы переключателей друг от друга. Если установить какой-либо переключатель, то остальные переключатели группы автоматически снимаются. В любой момент времени в группе может быть выделен лишь один переключатель.

Флажки

Назначение клавиш ускоренного вызова для надписей - student2.ru

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

Переключатель может быть либо установлен, либо снят, следовательно, свойство Value может принимать только значения True или False. Флажки могут находиться в трех состояниях: в установленном, снятом или неопределенном. Неопределенное состояние вовсе не означает, что флажок заблокирован, — пользователь может установить или снять его. Если бы флажок был заблокирован, любые операции с ним стали бы невозможны. Обычно флажки в неопределенном состоянии сообщают о том, что на другой форме установлены некоторые (но не все) флажки. Если посмотреть на рис. 3.7, можно заметить два флажка, закрашенных серым цветом. Если вам приходилось устанавливать Windows 95, вы поймете смысл этих флажков. Флажок Стандартные программы находится в неопределенном состоянии, потому что были установлены лишь некоторые (но не все) стандартные программы для Windows 95.

Свойства флажков

В следующей таблице перечислены все свойства флажков.

Alignment DownPicture Height RightToLeft
Appearance DragIcon HelpContextID Style
BackColor DragMode hWnd Tablndex
Caption Enabled Index TabStop
CausesValidation Font Left Tag
Container FontBold MaskColor ToolTipText
DataChanged FontItalic MouseIcon Top
DataField FontName MousePointer UseMaskColor
DataFormat FontSize Name Value
DataMember FontStrikethru OLEDropMode Visible
DataSource FontUnderline Parent WhatsThisHelpID
DisabledPicture ForeColor Picture Width

Как и в случае переключателей, самую заметную роль играют свойства Name, Caption и Value. Имена флажков (свойство Name) обычно снабжаются префиксом chk.

Назначение клавиш ускоренного вызова для надписей - student2.ru

Рис. 3.7. Флажки, находящиеся в неопределенном состоянии, выделены серым цветом

События флажков

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

Click KeyPress MouseUp OLESetData
DragDrop KeyUp OLECompleteDrag OLEStartDrag
DragOver LostFocus OLEDragDrop Validate
GotFocus MouseDown OLEDragOver  
KeyDown MouseMove OLEGiveFeedback  

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

Методы флажков

Методы флажков также совпадают с методами переключателей.

Drag OLEDrag SetFocus ZOrder
Move Refresh ShowWhatsThis  

Как и в случае флажков, перечисленные методы не особенно важны для работы с элементами.

Чтобы увидеть, как работают флажки, запустите приложение Controls и нажмите кнопку Check Box. В диалоговом окне Check Box Example находятся два флажка, изменяющих внешний вид текста в верхнем поле (рис. 3.8).

Назначение клавиш ускоренного вызова для надписей - student2.ru

Рис. 3.8. Диалоговое окно Check Box Example

Первый флажок отображает текст в поле полужирным шрифтом, а второй - курсивным. Из приведенного ниже фрагмента видно, как свойство FontBold текстового поля изменяется в процедуре события Click.

Private Sub chkBold_Click()

‘Событие Click происходит при изменении состояния флажка.

‘Свойство Value показывает новое состояние флажка.

If chkBold.Value = 1 Then ' Если флажок установлен

txtDisplay.FontBold = True

Else ' Если флажок снят

txtDisplay.FontBold = False

End If

End Sub

Работа с флажками

Следующий пример показывает, как работают флажки во всех трех состояниях:

1. Создайте новый проект командой File > New Project.

2. В окне свойств замените значение свойства Name с Form1 на frmMain.

3. Поместите на форму флажок. Задайте его свойству Name значение chkOptions, а свойству Caption — текст Задайте начинку для сэндвича:.

4. Дважды щелкните на флажке chkOptions, чтобы открыть окно программы. Выберите из списков объектов и процедур строки (General) и (Declarations) и добавьте следующий фрагмент:

Public PeanutButter As Boolean

Public Jelly As Boolean

5. Добавьте в процедуру события MouseUp события chkOptions следующий фрагмент:

Private Sub chkOptions_MouseUp(Button As Integer, Shift As Integer, _

X As Single, Y As,Single)

frmOptions.Show vbModal

If PeanutButter And Jelly Then

chkOptions.Value = 1

Exit Sub

End If

If PeanutButter Or Jelly Then

chkOptions.Value = 2

Exit Sub

End If

If PeanutButter And Not Jelly Then

chkOptions.Value = 3

Exit Sub

End If

End Sub

6. Щелкните в окне проекта правой кнопкой мыши и выберите из контекстного меню команду Add > Form. Выберите новую форму (значок Form) в окне Add Form.

7. В окне свойств задайте свойству Name новой формы значение frmOptions, а свойству Caption — значение Set Options.

8. Создайте на форме frmOptions флажок. Задайте свойству Name значение chk-PeanutButter, а свойству Caption — значение Арахисовое масло.

9. Создайте на форме еще один флажок. Задайте свойству Name значение chkJelly, а свойству Caption — значение Мармелад.

10. Дважды щелкните на форме frmOptions, чтобы открыть окно программы. Добавьте в процедуру события Load формы следующий фрагмент:

Private Sub Form_Load()

If frmMain.PeanutButter Then

ChkPeanutButter.Value = 1 Else

chkPeanutButter.Value = 0

End If

If frmMain.Jelly Then

chkJelly.Value = 1 Else

chkJelly.Value = 0

End If

End Sub

11. Добавьте в процедуру события Click переключателя chkPeanutButter следующий фрагмент:

Private Sub chkPeanutButter_Click()

If chkPeanutButter.Value = 1 Then

frmMain.PeanutButter = True

Else

frmMain.PeanutButter = False

End If

End Sub

12. Добавьте в процедуру события Click переключателя chkJelly следующий фрагмент:

Private Sub chkJelly_Click()

If chkJelly.Value = 1 Then

frmMain.Jelly = True Else

frmMain.Jelly = False

End If

End Sub

13. Запустите приложение командой Run > Start.

Если теперь щелкнуть на флажке, находящемся на форме frmMain, открывается диалоговое окно, в котором можно выбрать начинку для сэндвича — арахисовое масло и мармелад. Одни предпочитают сэндвичи с двумя видами начинки, другие ограничиваются чем-то одним. Если установить оба флажка и закрыть диалоговое окно, то флажок на форме будет установлен, а если выбрать лишь один флажок (арахисовое масло или мармелад), он будет находиться в неопределенном состоянии. Если вообще отказаться от начинки, флажок будет снят.

Рамки

Назначение клавиш ускоренного вызова для надписей - student2.ru Рамки (см. рисунок) обычно используются не сами по себе, а в сочетании с другими элементами. Внутри рамок размещаются такие элементы, как переключатели Я или флажки. Они группируются и в случае перемещения рамки перемещаются вместе с ней. Чтобы поместить элемент (скажем, переключатель) внутрь рамки, нельзя воспользоваться традиционным способом (дважды щелкнуть на нем и перетащить в нужное место). Вместо этого необходимо один раз щелкнуть на кнопке элемента в панели элементов и перетащить его внутрь рамки. После этого внутренние элементы будут перемещаться вместе с рамкой. Кроме того, рамки используются для группировки переключателей — если установить один переключатель во время выполнения программы, то все остальные переключатели группы автоматически снимаются. Если случайным образом разбросать переключатели по форме, они будут действовать как одна большая группа. Чтобы распределить их по группам, следует прибегнуть к помощи рамок. Переключатели, находящиеся внутри рамки, работают как самостоятельная группа и не влияют на состояние переключателей в других рамках. Хотя рамки нередко используются для группировки флажков, каждый флажок работает самостоятельно. Следовательно, установка одного флажка никак не отражается на состоянии остальных флажков той же группы. Такое поведение вполне логично — флажки не являются взаимоисключающими элементами (тогда как переключатели внутри одной группы, напротив, зависят друг от друга). Флажки группируются внутри рамок, чтобы не перемещать их в режиме конструирования по отдельности. Кроме того, рамка помогает визуально объединить флажки. Например, флажки, относящиеся к разным возможностям программы, можно расположить в разных рамках.

Имена рамок обычно имеют префиксы fга. Рамки должны помещаться на форму раньше элементов, находящихся внутри них.

Свойства рамок

Рамки обладают несколькими свойствами, перечисленными далее.

Appearance Font HelpContextID RightToLeft
BackColor FontBold hWnd Tablndex
BorderStyle FontItalic Index Tag
Caption FontName Left ToolTipText
ClipControls FontSize MouseIcon Top
Container FontStrikethru MousePointer Visible
DragIcon FontUnderline Name WhatsThisHelpID
DragMode ForeColor OLEDropMode Width
Enabled Height Parent  

Вероятно, самым важным свойством (после Name) следует считать Caption. Оно позволяет снабдить рамку содержательным названием, чтобы пользователю было проще понять, по какому признаку объединены флажки (или переключатели) внутри нее. Смысл отдельных переключателей/флажков разъясняется их свойством Caption. Например, в программе учета и доставки заказов может присутствовать рамка с названием Доставка, а внутри нее - переключатели Обычная и Срочная.

События рамок

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

Click MouseMove OLEGiveFeedback
DblClick MouseUp OLESetData
DragDrop OLECompleteDrag OLEStartDrag
DragOver OLEDragDrop  
MouseDown OLEDragOver  

События рамок используются довольно редко. Разве что в приложениях, позво-ляющих перетаскивать объекты, событие DragDrop иногда применяется для выполнения некоторых действий, когда пользователь «бросает» объект внутрь рамки. Перетаскивание рассматривается в уроке 11.

Методы рамок

Рамки поддерживают несколько методов. Они не дают особой пользы и редко встречаются в проектах, написанных на Visual Basic.

Drag OLEDrag ZOrder
Move Refresh ShowWhatsThis

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

Назначение клавиш ускоренного вызова для надписей - student2.ru

Рис. З.9. Рамка

Список

Назначение клавиш ускоренного вызова для надписей - student2.ru Списки (см. рисунок) хорошо знакомы всем пользователям Windows. Это идеальное средство для работы с перечнем из нескольких вариантов. Пользователь может просмотреть содержимое списка и выбрать одну или несколько строк для последующей обработки. Прямое редактирование содержимого списка невозможно — в таких случаях следует воспользоваться комбинированным полем, котором будет рассказано ниже. Если в списке помещаются не все строки, Visual Basic добавляет в него вертикальную полосу прокрутки. Давайте рассмотрим важнейшие свойства, события и методы списков.

Свойства списков

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

Appearance FontBold List Style
BackColor FontItalic ListCount Tablndex
CausesValidation FontName ListIndex TabStop
Columns FontSize MouseIcon Tag
Container FontStrikethru MousePointer Text
DataChanged FontUnderline MultiSelect ToolTipText
DataField ForeColor Name Top
DataFormat Height Newlndex Toplndex
DataMember HelpContextID OLEDragMode Visible
DataSource hWnd Parent WhatsThisHelpID
DragIcon Index RightToLeft Width
DragMode IntegralHeight SelCount  
Enabled ItemData Selected  
Font Left Sorted  

Свойство Columns позволяет создавать списки, состоящие из нескольких столб-цов. К сожалению, эти столбцы относятся к «газетному» типу — в Visual Basic не поддерживаются настоящие многостолбцовые списки Access, в которых различные строки отображаются в различных столбцах. Visual Basic просто распределяет один и тот же объект данных по нескольким столбцам.

Свойство List задает или возвращает содержимое строки, входящей в список. При Работе с этим свойством необходимо указать номер нужной строки. Нумерация строк начинается с 0 и заканчивается числом, на 1 меньшим общего количества строк в списке. Следовательно, если список состоит из 10 строк, они будут иметь номера от 0 до 9.

ПОДСКАЗКА

В Visual Basic нельзя создать настоящий многостолбцовый список. Один из обходных путей заключается в том, чтобы сцепить несколько строк в одну и включить ее в одностолбцовый список Visual Basic. Для выравнивания столбцов можно дополнить объединенную строку пробелами или символами табуляции (Chr(9)). Существует и другой вариант — хранить объединяемые строки в строковых переменных фиксированной длины. Однако в этом случае в списке нельзя использовать пропорциональный шрифт.

ПРИМЕЧАНИЕ

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

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

lstList1.List(2)

Содержимое текущей выделенной строки хранится в свойстве Text. Свойство ListIndex задает или возвращает номер текущей выделенной строки, если в списке нет выделенных строк, свойство ListIndex равно -1.

ПРИМЕЧАНИЕ

Выражения IstList1. List(lstList1. ListIndex) и IstListl.Text имеют одинаковое значение,

Номер последней строки, занесенной в список (см. далее описание метода Addltem), хранится в свойстве Newlndex. Свойство ListCount возвращает общее количество строк в списке. Оно всегда на 1 превышает значение свойства Newlndex — дело в том, что номера строк начинаются с 0, а свойство ListCount считает строки, начиная с 1. Для пустого списка свойство ListCount равно 0.

Свойство MultiSelect показывает, может ли пользователь выделить сразу несколько строк. В списках допускается простое и расширенное выделение нескольких строк. В первом случае выделяются только смежные строки (обычно для этого используется мышь и клавиша Shift), а во втором — как смежные, так и несмежные строки. Чаще всего расширенное выделение производится щелчками мышью при нажатой клавише Ctrl и/или Shift.

Свойство Selected имеет логический тип и доступно лишь во время выполнения программы. Логические свойства могут принимать всего два значения — True и False. Следующий пример выделяет в списке третью строку:

IstListl.Selected(2) = True

Обратите внимание — номер (2) относится к третьей строке списка.

Осталось лишь упомянуть о свойстве Sorted. Его значение задается только в ре-ме конструирования. Во время выполнения программы можно прочитать его, то есть узнать, равно ли оно True или False), но не изменить, то есть превратить сортированный список в несортированный или наоборот. Если в режиме конструирования установить значение свойства Sorted в True, то все строки, добавляе-ые в список (обычно методом Addltem), будут сортироваться в алфавитном по-ядке. Сортировка выполняется только по возрастанию и не учитывает регистра символов.

События списков

Ниже перечислены все события, поддерживаемые списками,

Click KeyDown MouseUp OLEStartDrag
DblClick KeyPress OLECompleteDrag Scroll
DragDrop KeyUp OLEDragDrop Validate
DragOver LostFocus OLEDragOver  
GotFocus MouseDown OLEGiveFeedback  
ItemCheck MouseMove OLESetData  

Вероятно, чаще всего для списков используется событие DblClick. Это вполне соответствует общим принципам работы со списками в приложениях Windows. Работа со списком обычно начинается с его заполнения, для чего служит метод Addltem (см. раздел «Методы списков»). Когда список будет заполнен, можно выделить одну из его строк, назначив ее свойству Selected значение True. Пользователь либо соглашается с выделением по умолчанию, либо выделяет другую строку щелчком мыши. При нажатии кнопки О К по свойству Text определяется содержимое выделенной строки. Тем не менее существует популярный способ ускорить работу со списком — двойной щелчок на одной из строк. В этом случае пользователь одновременно выделяет строку и начинает ее дальнейшую обработку. Во многих приложениях Windows эта методика применяется для копирования строк из одного списка в другой.

Методы списков

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

Addltem Move SetFocus
Clear Refresh ShowWhatsThis
Drag Removeltem ZOrder

Особого внимания заслуживают три метода — Addltem, Clear и Removeltem. Первый, как упоминалось ранее, служит для включения строк в список. Как нетрудно догадаться, метод Removeltem удаляет строки из списка. Чтобы очистить сразу весь список, воспользуйтесь методом Clear.

В простейшем варианте метод Addltem имеет следующий синтаксис:

IstListl.Addltem "Привет"

Этот фрагмент включает в список строку "Привет". Довольно часто при заполнении списка метод Addltem вызывается несколько раз подряд. Многие программисты помещают вызовы Addltem в процедуру Form_Load, чтобы список заполнялся при загрузке формы. Вы можете задать положение строки, указывая ее номер в качестве дополнительного параметра:

IstListl.Addltem "Привет", 3

Строка "Привет" помещается на четвертое место в списке. Если номер не указан, строка добавляется в конец списка, или, если свойство Sorted имеет значение True, её позиция определяется порядком сортировки.

ВНИМАНИЕ

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

Работа со списками

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

1. Создайте новый проект, выполнив команду File > New Project. Выберите в Project Wizard значок Standard EXE.

2. Создайте на форме Form1 два списка.

3. Разместите один список в верхней, а другой — в нижней половине формы. Измените размеры обоих списков так, чтобы их ширина почти совпадала с шириной формы.

4. Дважды щелкните на форме, чтобы открыть окно программы. Добавьте в процедуру события Load следующий фрагмент:

Private Sub Form_Load()

List1.Addltem "Гайки"

List1.Addltem "Болты"

List1.Addltem "Гвозди"

List1.Addltem "Скобы"

Listl.Addltem "Молоток"

Listl.Addltem "Пила"

Listl.Addltem "Напильник"

Listl.Addltem "Наждак"

Listl.Addltem "Рубанок"

End Sub

5. Добавьте в процедуру события DblClick списка Listl следующий фрагмент:

Private Sub List1_DblClick()

' Включить строку в другой список

List2.Addltem Listl.Text

' Удалить строку из данного списка

Listl.Removeltem Listl.ListIndex

End Sub

6. Добавьте следующий фрагмент в процедуру события DblClick списка List2:

Private Sub List2_DblClick()

' Включить строку в другой список

Listl.Addltem List2.Text

Удалить строку из данного списка

List2.Removeltem List2.ListIndex

End Sub

7. Запустите программу командой Run > Start.

Двойной щелчок на любой строке перемещает ее в другой список. Как видно из фрагментов, приведенных в этапах 5 и 6, строка включается в другой список до того, как она будет удалена из текущего. Метод Addltem должен вызываться раньше Removeltem, поскольку в противном случае в другой список попадет не та строка. Наше изучение списков продолжится в следующем разделе.

Комбинированные поля

Назначение клавиш ускоренного вызова для надписей - student2.ru

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

Наши рекомендации