10 класс
Тема: Компонент ComboBox.
Цель: Знакомства с компонентом ComboBox.
Вырабатывать умения и навыки применения компонента ComboBox при создании приложений.
Прививать интерес к предмету, воспитывать самостоятельность в работе.
Повторение пройденного.
Повторить известные учащимся компоненты.
Для чего они служат, как применяются?
Объяснение нового материала.
Постановка задачи. Составить программу, которая умеет составлять предложения.
Наша программа будет работать так. Мы введем в нее три списка слов и научим ее брать одно слово из первого списка, одно слово из второго списка, одно слово из третьего списка. Из этих трех слов она и будет составлять предложения. Грамматически эти предложения будут всегда правильны, правда, не всегда логичны.
Работа над созданием проекта.
Запустим систему VB и создадим новый проект. Сохранив его под именем писатель.
На форме разместим три компонента ComboBox (Поле со списком) и командную кнопку CommandButton.
Определим тип списка. Свойство Style→2 – Dropdown List (Раскрывающийся список). Проделать эту операцию для всех трех списков.
Д
ля каждого из списков необходимо задать содержимое, т.е. набор пунктов, входящих в них. (Вводим содержимое списка на панели свойств)
Список животных Список наречий Список действий (глаголы)
После щелчка на раскрывающейся кнопке в первой свободной строчке списка появляется курсор. Сюда вводится текст пункта. Если после ввода нажать клавишу Enter то список закроется. Поэтому для завершения ввода пункта надо использовать комбинацию клавиш + — тогда список останется открытым, а курсор переместится на следующую строку. После завершения введения списка нажать Enter.
Кнопка Command служит для «перемешивания» списков: Command1 →Caption → Случайный выбор.
Первая проверка.
Наша программа почти готова. Если ее запустить, хотя мы не написали ни единой строчки кода, тем не менее, можно выбирать то, что захотим. Но есть два недостатка:
Во-первых, в начальный момент списки пусты, что неправильно.
В
о-вторых, не работает командная кнопка.
Остановим программу при помощи команды Run → End. И приступим к ручному программированию.
Первый выбор значения из списка должен выполняться сам, без нашего участия, т.е. автоматически. Таким образом мы должны заставить программу реагировать на какое-то событие. Но какое именно? Оно не может быть связано со списками, т.е. должно произойти еще до того, как программа нарисует их на экране. Оно не может быть связано с мышью, т.е. должно произойти до появления на экране каких-либо элементов управления. Такое событие есть. Оно связано с формой. Форма – это тоже объект, имеющий свойства. У нее есть событие загрузка, которое наступает в момент появления окна будущей программы, но до того, как в нем появятся элементы управления. Это событие — Load – загрузка.
То, какой элемент списка отображается на экране, определяет свойство ListIndex (Индекс по списку). Нумерация пунктов в списках начинается с нуля. Индекс первого элемента имеет значение 0.
Как вы думаете, как показать первый элемент каждого списка?
Private Sub Form_Load()
Combo1.ListIndex = 0
Combo3.ListIndex = 0
Можно выбрать и другие пункты списка.
Как запрограммировать неожиданность? Для случайного выбора в системе VB есть специальная функция RND. В большинстве систем программирования она делает одно и то же действие: Возвращает случайное действительное число, в диапазоне от 0 до 1. Но нам такое маленькое число не нужно. Наша задача – получить случайный индекс элемента списка. Для этого есть стандартный прием – надо умножить значение функции RND на количество элементов списка и взять от получившегося числа целую часть.
Допустим в списке содержится 5 элементов. Чтобы найти индекс случайного элемента надо взять целую часть от произведения 5*RND.
А как взять целую часть от произведения? Для этого в языке программирования VB есть функция INT. Ее название происходить от слова Integer – целое число. Например, если в списке 5 элементов, то индекс случайного элемента можно вычислить по формуле
Int(5*Rnd).
Все это хорошо, но откуда наша программа узнает, сколько элементов находится в каждом из ее списков?. Сегодня в нашем списке 7 элементов, а завтра мы добавим в него какого-нибудь зверя или двух и всю программу придется заново переписывать?
Нет, ничего переписывать не придется, если воспользоваться свойством ListCount объекта ComboBox. Это свойство хранит количество элементов, имеющихся в списке.
Таким образом, чтобы найти случайный элемент для первого списка нам надо просто вычислить выражение
Int(Combo1.ListCount*Rnd)
Это все! Теперь мы знаем достаточно, чтобы запрограммировать действие кнопки Случайный выбор.
Давайте попробуем запрограммировать кнопку Случайный выбор.
Private Sub Command1_Click()
Combo1.ListIndex = Int(Rnd * Combo1.ListCount)
Combo2.ListIndex = Int(Rnd * Combo2.ListCount)
Combo3.ListIndex = Int(Rnd * Combo3.ListCount)
Вторая проверка.
Давайте снова запустим программу и убедимся, что замеченные ранее ошибки и недочеты исправлены. Сразу после запуска списки уже не выглядят пустыми, а командная кнопка работает именно так, как мы хотели. Можно ли считать, что программа работает правильно? В целом да, но в ней все-таки остался еще один недочет. Если запустить несколько раз программу и нажимая на кнопку Случайный выбор, можно заметить что последовательность фраз после каждого запуска в точности повторяется.
Так происходит потому, что функция RND – это не игральные кости, на которых выпадают случайные значения. Это математическая функция, работа которой запрограммирована неким алгоритмом. После каждого запуска этот алгоритм работает совершенно одинаково. Поэтому в одном запуске программы результаты выглядят довольно случайными, но они совпадают с результатами выданными во втором запуске, третьем и т.д. В общем , функция RND выдает нам не совсем случайные числа, а так называемые псевдослучайные.
Для того чтобы последовательность чисел, которые создает функция RND, была более случайной, т.е. начинала работу каждый раз с разного числа, необходимо в программу вставить всего один оператор:
Теперь наша программа действительно готова.
Private Sub Command1_Click()
Combo1.ListIndex = Int(Rnd * Combo1.ListCount)
Combo2.ListIndex = Int(Rnd * Combo2.ListCount)
Combo3.ListIndex = Int(Rnd * Combo3.ListCount)
Private Sub Form_Load()
Combo1.ListIndex = 0
Combo3.ListIndex = 0
14. Запустите программу и убедитесь, что она работает так, как мы того хотели. Изменять фразу, получающуюся на экране, можно путем выбора слов в списках или щелчком на кнопке Случайный выбор. В последнем случае текущие пункты списков выбираются случайным образом.
Е
сли выйти из программы, а затем запустить ее снова, последовательность случайных фраз будет другой.
Работа с компьютером. (Происходит в процессе объяснения темы.)
Домашнее задание.
Изменить приложение, дополнив его именами прилагательными и дополнениями, или создать свое приложение с использованием компонентов ComboBox.