Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VBA_06_Визуальное программирование.doc
Скачиваний:
4
Добавлен:
15.08.2019
Размер:
2.83 Mб
Скачать

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

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

ListIndex - возвращает номер выбранного элемента списка. Нумерация элементов списка начинается с нуля. Если ни один элемент из списка не выбран, то свойство возвращает -1;

ListCount - возвращает число элементов списка;

TopCount - возвращает элемент списка с наибольшим номером;

TextColumn - устанавливает столбец в списке, стоящий на пересечении указанной строки и столбца;

Text - возвращает выбранный в списке элемент;

List - возвращает элемент списка, стоящий на пересечении указанной строки и столбца. Синтаксис: List(Row,Source). Строки и столбцы нумеруются с нуля.

Для заполнения и удаления списка применяются методы RemoveItem, AddItem и Clear:

Clear - удаляет все элементы из списка;

RemoveItem - удаляет из списка элемент с указанным номером. Синтаксис:

RemoveItem(index), где index - номер удаляемого элемента;

AddItem - добавляет элемент в список. Синтаксис:

AddItem(item[, varIndex]), где item - элемент (строковое выражение) добавляемый, добавляемый в список; varIndex - номер добавляемого элемента

В примере на рис.3 при нажатии кнопки с надписью «Add Element»(CommandButton1) добавляется один элемент списка в элемент ListBox1 на рабочем листе Excel. При выделении мышью какого-либо элемента в списке, он отображается на листе Excel. При нажатии кнопки с надписью ”Clear ListBox ” (CommandButton2) происходит очистка списка.

Private Sub CommandButton1_Click()

Dim i As Integer

i = ListBox1.ListCount + 1

ListBox1.AddItem "Элемент" & CStr(i)

End Sub

Private Sub CommandButton2_Click()

ListBox1.Clear

End Sub

Private Sub ListBox1_Click()

Dim i As Integer

i = ListBox1.ListIndex + 1

Sheets("Лист1").Cells(i, 4).Value = ListBox1.Text

Sheets("Лист1").Cells(i, 5).Value = ListBox1.ListIndex + 1

End Sub

Для создания многоколоночного списка следует установить свойство ColumnCount, которое задаёт, сколько столбцов будет в списке. Кроме того, при работе с таким списком полезно определить значение свойства ColumnWidths, которое устанавливает ширину каждого столбца. А затем список надо заполнить. Нумерация столбцов в списке начинается с нуля. В качестве примера создания списка с несколькими столбцами рассмотрим простой проект, в котором производится вычисление значений функции sin(x) на промежутке от a до b с шагом h, а результат выводится в список с двумя столбцами. На листе расположим по три надписи, два поля ввода и список.

Private Sub CommandButton1_Click()

lstTab.ColumnCount = 2

lstTab.ColumnWidths = "60;60"

Dim a As Double, b As Double, h As Double

Dim x As Double, f As Double, i As Long

Dim Values() As Double

a = CDbl(txtA.Text)

b = CDbl(txtB.Text)

h = CDbl(txtH.Text)

If (b - a) / h < 1 Then Exit Sub

ReDim Values((b - a) / h, 1)

i = 0

For x = a To b Step h

f = Sin(x)

Values(i, 0) = x

Values(i, 1) = f

i = i + 1

Next x

lstTab.List = Values

End Sub

Р ассмотрим два примера получения в многостолбцовом списке выбранного значения из произвольного столбца. Первый пример основан на свойстве ListIndex, определяющем номер выбранной в списке строки, и свойстве List(row, column), где row - номер строки, а column - номер столбца. Здесь lstNumbers - имя списка, lblFirst и lblSecond - имена текстовых окон.

Private Sub CommandButton1_Click()

Dim i As Integer

Randomize

For i = 0 To 299

lstNumbers.AddItem i

lstNumbers.List(i,1)= Int(101 * Rnd())

lstNumbers.List(i,2)= Int(101 * Rnd())

Next i

End Sub

Private Sub lstNumbers_Click()

lblFirst.Caption = lstNumbers.List(lstNumbers.ListIndex, 1)

lblSecond.Caption = lstNumbers.List(lstNumbers.ListIndex, 2)

End Sub

Второй пример основан на свойстве TextColumn, устанавливающем номер столбца, значение которого в списке возвращается свойством Text, а также на свойстве BoundColumn, задающем номер столбца, значение которого в списке возвращается свойством Value (программа для той же группы элементов). Для работы с этими свойствами после создания списка в окне свойств для него задаются значения этих свойств. В нашем случае (для той же группы элементов) задайте - 2 для свойства TextColumn и 3 для свойства BoundColumn. Затем для тех же элементов наберите следующие коды:

Private Sub CommandButton1_Click()

Dim i As Integer

Randomize

For i = 0 To 299

lstNumbers.AddItem i

lstNumbers.List(i, 1) = Int(101 * Rnd())

lstNumbers.List(i, 2) = Int(101 * Rnd())

Next i

End Sub

Private Sub lstNumbers_Click()

lblFirst.Caption = lstNumbers.Text

lblSecond.Caption = lstNumbers.Value

End Sub

Если выделенные в списке значения ваша программа использует в вычислениях, то следует учитывать, что обращения к колонкам с целыми числами можно использовать без всяких ограничений – Visual Basic автоматически преобразует строки в целые числа. А вот при работе с вещественными числами необходимо использование встроенной функции Val, преобразующей строку в вещественное число, так как Visual Basic не преобразует автоматически строки в вещественные числа. Например, в следующем примере числа из 2 и 3 столбцов выделенной строки списка суммируются и результат выводится в текстовое окно.

Private Sub CommandButton1_Click()

Dim i As Integer

Randomize

For i = 0 To 19

ListBox1.AddItem i

ListBox1.List(i, 1) = 101 * Rnd()

ListBox1.List(i, 2) = 101 * Rnd()

Next i

End Sub

Private Sub ListBox1_Click()

Label1.Caption = Val(ListBox1.List(ListBox1.ListIndex, 1)) + _

Val(ListBox1.List(ListBox1.ListIndex, 2))

End Sub

Здесь обращения к числам в списке находятся в функции Val.

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

ListIndex, методы Clear, RemoveItem и AddItem полностью аналогичны таким же свойствам в Списке. Кроме того, есть ряд уникальных свойств:

DropButtonStyle – устанавливает вид поля со списком. Допустимые значения: fmDropButtonStylePlain или 0 - кнопка без символов; fmDropButtonStyleArrow или 1 - кнопка со стрелкой; fmDropButtonStyleEllipsis или 2 - кнопка с эллипсом; fmDropButtonStyleReduce или 3 – кнопка с линией.

ListRows - устанавливает количество элементов, отображаемых в поле со списком;

MatchRequired - допустимые значения: true – в поле нельзя ввести значения, отличные от перечисленных в списке; false – значения, отличные от перечисленных в списке ввести можно.

MatchFound - допустимые значения: true – среди элементов поля со списком имеется элемент, совпадающий с элементом в поле ввода; false - в противном случае.