Приведённые практические работы по программированию могут быть использованы при изучении элементов выбора 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
Задания
- Добавьте в проект список оценок (2, 3, 4, 5) – List4.
- Измените проект таким образом, чтобы можно было добавлять в результаты фамилию и оценку ученика.
- Создайте кнопку “Очистить результаты”.
Примерный вид формы показан на рисунке.
Практическая работа 2. Проект “Переводчик” <Приложение 2>
Задание: создать проект для проверки знания иностранных слов (англо-русский и русско-английский переводчик).
Элементы интерфейса проекта:
- Комбинированные списки Combo1 и Combo2 – для хранения русских и английских слов. Индексы русских слов в списке должны соответствовать индексам соответствующих им английских слов.
- Текстовое поле Text1 - для вывода случайного слова из списка, которое необходимо перевести.
- Текстовое поле Text2 - для вывода комментария “Верно” или “Неверно”.
- Текстовые поля Text3, Text4 - для вывода количества вопросов и верных ответов.
- Таймер Timer1 – для временной задержки при выводе очередного вопроса.
- Image1 – для вывода рисунка, соответствующего слову.
- Элемент 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
Задания:
- Создайте процедуру кнопки “Перевод англ/рус”.
- Добавьте кнопку Сброс.
- Подберите 2 звуковых файла для подтверждения верного и неверного ответа, подключите эти файлы к проекту.
- Создайте заставку к проекту.
Самостоятельная работа
- Создать проект “Выбор шрифта”, позволяющий выбрать с помощью списков тип шрифта, размер, начертание (свойства): жирный, подчёркнутый, курсив. Выбранные параметры должны применяться к метке Образец.
- Создать проект “Заказы CD/DVD дисков по каталогам”. На форме разместить 2 комбинированных списка: “Игры” и “Обучающие программы”; список “Заказано”. Кнопки “Добавить в заказ” добавляют выбранный элемент в список “Заказано”. Кнопка “Удалить из заказа” удаляет выбранный элемент из заказа. Предусмотреть подсчёт количества заказов в списке.
- Создать проект “Результаты кросса” с использованием 3-х списков. Двойным щелчком мыши в списке студентов (List1) выбирается фамилия и добавляется в список “Зачёт” (List2). Двойным щелчком в списке “Зачёт” фамилия возвращается назад. Кнопкой “Добавить в список” фамилия, введённая в текстовое поле Text1, заносится в список List1. Кнопка “н/а” заносит выбранную фамилию из списка в список List3 (н/а).
Свойства шрифта в метке задаются следующими командами:
Label1.Font.Italic = True – установить курсив
Label1.Font.Bold = False – отменить жирный шрифт
Label1.Font.Underline = True – установить подчёркнутый шрифт
Label1.Font = Combo1.Text – применить к метке тип шрифта, выбранный в комбинированном списке 1
Label1.Font.Size = Combo1.Text - применить к метке размер шрифта, выбранный в комбинированном списке 1
Литература
- Глушаков С.В. , Мельников В.В., Сурядный А.С. Программирование в среде Windows. Visual Basic 6.0. М.: ООО “Издательство АСТ”, 2001
- Браун С. Visual Basic. Учебный курс. – Спб.: Питер, 2002