Работа со списками в Visual Basic

Разделы: Информатика


Приведённые практические работы по программированию могут быть использованы при изучении элементов выбора Visual Basic. Списки целесообразно изучать после знакомства с переключателями (OptionButton) и флажками (CheckBox).

При объяснении нового материала удобно использовать распечатки с изложением теоретического материала и примерами программ, которые выдаются каждому студенту (ученику), либо методические пособия (мы используем авторское пособие “Практикум по решению задач в среде Visual Basic”, часть 1, 2).

Приведённые практические работы рассчитаны на 3 занятия по 2 часа. Задания самостоятельной работы можно использовать в качестве домашних заданий.

Теоретический материал

В Visual Basic существует 2 вида списков:

  • комбинированный список ComboBox;
  • список ListBox.

1. Комбинированный список ComboBox

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

Свойство Style задаёт внешний вид комбинированного списка (по умолчанию оно равно 0 - элемент ComboBox отображается в виде текстового поля со стрелкой справа, позволяющей развернуть весь список и выбрать требуемое значение). Если Style = 1, то постоянно отображается весь список (или список с полосой прокрутки).

Основные свойства ComboBox

Название

Описание

List

Содержит в виде массива список имеющихся элементов, нумерация которых начинается с 0.

ListIndex

Возвращает порядковый номер выбранного значения из списка (если значение было введено пользователем в текстовом поле, то в этом случае ListIndex = -1)

ListCount

Определяет количество элементов в ComboBox..

NewIndex

Содержит индекс последнего добавленного в список значения (используется при установке Sorted = True).

Sorted

Представляет собой логическое значение, определяющее, отсортирован ли список (True, False).

Style

Определяет внешний вид комбинированного списка:

0 - Dropdown Combo (раскрывающийся комбинированный список);

1 - Simple Combo (простой комбинированный список);

2 - Dropdown List (раскрывающийся список).

Text

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

Методы ComboBox

AddItem

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

Clear

Удаляет все имеющиеся значения списка.

RemoveItem

Удаляет элемент с указанным порядковым номером.

Для добавления нового элемента в список используется метод AddItem.

Пример: Combo1.AddItem “Пение” - добавить в список Combo1 слово Пение.

Добавляемые в список элементы имеют тип String; [index] - порядковый номер в списке, под которым будет находиться новый элемент (необязательный параметр).

Добавить элементы в комбинированный список можно также на этапе разработки с помощью свойства List. Для добавления очередного элемента в список нужно ввести этот элемент в свойстве List и нажать комбинацию клавиш Ctrl + Enter.

2. Список ListBox

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

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

Свойство MultiSelect позволяет задать режим множественного выбора элементов в списке. В режиме MultiSelect = 1 добавление элемента в выделенную группу или исключение из нее осуществляется с помощью щелчка мыши или нажатия пробела. Если MultiSelect = 2, то в этом случае выделение элементов выполняется по аналогии с программой Проводник:

  • щелчок мыши при нажатой клавише Shift позволяет выделить несколько подряд расположенных элементов;
  • щелчок мыши при нажатой клавише Ctrl даёт возможность выделять группу несмежных элементов списка.

Основные свойства элемента ListBox

Название

Описание

Columns

Задаёт количество колонок в списке:

0 - одноколончатый список с вертикальной прокруткой;

1 - одноколончатый список с горизонтальной прокруткой;

>1 - многоколончатый список с горизонтальной прокруткой

Selected

Возвращает массив логических значений для обрабатываемого списка, содержащий состояние его элементов (выбран/не выбран) - как правило, используется в случае множественного выбора (свойство MultiSelect)

MultiSelect

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

0 - None (обычный список);

1 -Simple (простой множественный выбор - щелчок мыши или нажатие Пробел выделяет очередной элемент или снимает выделение);

2 - Extended (расширенный множественный выбор) - выделение с использованием вспомогательных клавиш.

Свойства List, ListIndex, ListCount, NewIndex, Sorted, Text аналогичны свойствам элемента ComboBox;

см. табл. 2.53

Методы ListBox аналогичны методам ComboBox.

Практическая работа 1. Проект “Результаты сессии” <Приложение 1>

Задание: создать проект, содержащий 3 списка: список студентов группы; список студентов, получивших зачёт и список неаттестованных. Двойным щелчком мыши в списке студентов (List1) выбирается фамилия и добавляется в список “Зачёт” (List2). Двойным щелчком в списке “Зачёт” фамилия возвращается назад. Кнопкой “Добавить в список” фамилия, введённая в текстовое поле Text1, заносится в список List1. Кнопка “н/а” заносит выбранную фамилию из списка студентов в список List3 ( н/а).

Private Sub Form_Load() ‘загрузка формы

List1.AddItem "Чесноков": List1.AddItem "Симонов"

List1.AddItem "Трушков": List1.AddItem "Морозова"

List1.AddItem "Егорова"

End Sub

Private Sub List1_DblClick() ‘перенести из списка в зачёт

List2.AddItem List1.Text

List1.RemoveItem List1.ListIndex ‘удалить из списка

End Sub

Private Sub List2_DblClick() ‘перенести назад в Список из Зачёт

List1.AddItem List2.Text

List2.RemoveItem List2.ListIndex

End Sub

Private Sub List3_DblClick() ‘перенести назад в список из н/а

List1.AddItem List3.Text

List3.RemoveItem List3.ListIndex

End Sub

Private Sub Command1_Click() ‘добавить в список из текст. поля

List1.AddItem Text1.Text

End Sub

Private Sub Command3_Click() ‘добавить в н/а

List3.AddItem List1.Text

List1.RemoveItem List1.ListIndex ‘удалить из списка

End Sub

Задания

  1. Добавьте в проект список оценок (2, 3, 4, 5) – List4.
  2. Измените проект таким образом, чтобы можно было добавлять в результаты фамилию и оценку ученика.
  3. Создайте кнопку “Очистить результаты”.

Примерный вид формы показан на рисунке.

Практическая работа 2. Проект “Переводчик” <Приложение 2>

Задание: создать проект для проверки знания иностранных слов (англо-русский и русско-английский переводчик).

Элементы интерфейса проекта:

  1. Комбинированные списки Combo1 и Combo2 – для хранения русских и английских слов. Индексы русских слов в списке должны соответствовать индексам соответствующих им английских слов.
  2. Текстовое поле Text1 - для вывода случайного слова из списка, которое необходимо перевести.
  3. Текстовое поле Text2 - для вывода комментария “Верно” или “Неверно”.
  4. Текстовые поля Text3, Text4 - для вывода количества вопросов и верных ответов.
  5. Таймер Timer1 – для временной задержки при выводе очередного вопроса.
  6. Image1 – для вывода рисунка, соответствующего слову.
  7. Элемент MMControl1 - для воспроизведения звука.

Элемент MMControl является дополнительным компонентом VB (Activ X). Для его установки необходимо:

  • Открыть в меню Проект – Компоненты вкладку Управление (Control);
  • Установить флажок MicrosoftMultimedia Control 6.0;
  • На панели элементов управления появится новый значок MMControl.

Рисунки к проекту сохраните в папке с проектом в порядке следования слов в списке Combo1:

Ris0.jpg – рисунок к первому слову списка;

Ris1.jpg – рисунок ко второму слову списка и т.д.

Для определения имени файла рисунка в проекте используем переменную Path:

Path = "Ris" & Mid(Str(n), 2, 1) & ".jpg"

Функция Mid используется для того, чтобы убрать пробел перед числом в имени файла, т.к. функция Str(n) для положительного числа формирует строку с пробелом перед числом. Таким образом, получаем неверное имя файла Ris 0.jpg, вместо Ris0.jpg.

Рассмотрим основные процедуры проекта.

1) В процедуре загрузки формы нужно заполнить списки русских и английских слов.

Dim n, k, z, p As Integer, Path As String

‘n – индекс слова в списке; k – количество верных ответов; z – кол. вопросов; p – признак направления перевода; Path – путь к файлу с рисунком на диске

Private Sub Form_Load()

Combo1.AddItem "собака": Combo1.AddItem "дельфин"

Combo1.AddItem "осёл": Combo1.AddItem "красный"

Combo1.AddItem "зеленый": Combo2.AddItem "Dog"

Combo2.AddItem "Dolphin": Combo2.AddItem "Donkey"

Combo2.AddItem "Red": Combo2.AddItem "Green"

k = 0 ’количество верных ответов

z = 0 ‘количество вопросов

End Sub

2) При выборе кнопки “Перевод рус/англ” должно появляться русское слово. Для данного слова нужно найти перевод в списке английских слов. Список русских слов при этом должен скрываться.

Private Sub Command5_Click() 'Перевод рус/англ

p = 1 ‘признак перевода – рус/англ

Combo1.Visible = False ‘скрыть список русских слов

Combo2.Visible = True ‘показать список англ. слов

Label1.Caption = "Русское слово"

Label5.Visible = False

Timer1.Enabled = True ‘включить таймер

End Sub

3) В процедуре таймера случайным образом определяем индекс слова в списке слов. Если p=1, то было выбрано направление перевода рус/англ., поэтому слово выбирается из списка русских слов Combo1.

Private Sub Timer1_Timer()

Text2.Text = ""

Image1.Visible = False

Randomize Timer

z = z + 1 ‘подсчёт кол. вопросов

n = Int(Rnd * 4) ‘случайный выбор индекса слова в списке слов

If p = 1 Then Text1.Text = Combo1.List(n)

Timer1.Enabled = False

End Sub

4) Для выбора перевода заданного русского слова пользователь делает щелчок по списку английских слов. Если индекс исходного русского слова n совпадает с индексом слова-перевода, выбранного пользователем, то ответ верный.

Private Sub Combo2_Click() 'список англ. слов

If n = Combo2.ListIndex Then 'если ответ верный

Text2.Text = "Верно!!!"

k = k + 1

Text3.Text = Str(k)

Image1.Visible = True ‘показать рисунок

MMControl1.FileName = "da.wav" ‘загрузить звуковой файл

Path = "Ris" & Mid(Str(n), 2, 1) & ".jpg"

Image1.Picture = LoadPicture(Path) ‘загрузить файл с соответствующим рисунком

Else 'если ответ неверный

Text2.Text = "Неверно!!!"

MMControl1.FileName = "no.wav"

End If

MMControl1.Command = "sound" ‘воспроизвести звук. файл

Text4.Text = Str(z)

Timer1.Enabled = True

End Sub

Задания:

  1. Создайте процедуру кнопки “Перевод англ/рус”.
  2. Добавьте кнопку Сброс.
  3. Подберите 2 звуковых файла для подтверждения верного и неверного ответа, подключите эти файлы к проекту.
  4. Создайте заставку к проекту.

Самостоятельная работа

  1. Создать проект “Выбор шрифта”, позволяющий выбрать с помощью списков тип шрифта, размер, начертание (свойства): жирный, подчёркнутый, курсив. Выбранные параметры должны применяться к метке Образец.

    Свойства шрифта в метке задаются следующими командами:

    Label1.Font.Italic = True – установить курсив

    Label1.Font.Bold = False – отменить жирный шрифт

    Label1.Font.Underline = True – установить подчёркнутый шрифт

    Label1.Font = Combo1.Text – применить к метке тип шрифта, выбранный в комбинированном списке 1

    Label1.Font.Size = Combo1.Text - применить к метке размер шрифта, выбранный в комбинированном списке 1

  1. Создать проект “Заказы CD/DVD дисков по каталогам”. На форме разместить 2 комбинированных списка: “Игры” и “Обучающие программы”; список “Заказано”. Кнопки “Добавить в заказ” добавляют выбранный элемент в список “Заказано”. Кнопка “Удалить из заказа” удаляет выбранный элемент из заказа. Предусмотреть подсчёт количества заказов в списке.
  2. Создать проект “Результаты кросса” с использованием 3-х списков. Двойным щелчком мыши в списке студентов (List1) выбирается фамилия и добавляется в список “Зачёт” (List2). Двойным щелчком в списке “Зачёт” фамилия возвращается назад. Кнопкой “Добавить в список” фамилия, введённая в текстовое поле Text1, заносится в список List1. Кнопка “н/а” заносит выбранную фамилию из списка в список List3 (н/а).

Литература

  1. Глушаков С.В. , Мельников В.В., Сурядный А.С. Программирование в среде Windows. Visual Basic 6.0. М.: ООО “Издательство АСТ”, 2001
  2. Браун С. Visual Basic. Учебный курс. – Спб.: Питер, 2002