Тема: Работа со списком
Цель урока
В данном уроке создается приложение, на примере которого вы сможете научиться:
- Заполнять списки
- Выбирать несколько элементов из списка
- Выполнять специфицированную операцию над выбранными элементами из списка
Практика
Создадим приложение, которое позволит выбрать несколько чисел, выводимых В списке В диалоговом Окне Операции над элементами списка (рис. У3.1).
В группе Операция следует установить один из переключателей: сумма, произведение или среднее, чтобы указать, какая операция будет выполняться над выбранными числами. Нажатие кнопки вычислить должно привести к выполнению операции и выводу результата в поле Результат.
Рис. У3.1. Диалоговое окно Операции над элементами списка
Обсудим, как приведенная ниже программа решает перечисленные задачи и что происходит в программе.
|
|
|
|
|
|
-
Активизирует диалоговое окно.
-
Запрещает ввод данных в поле Результат,
-
Назначает клавише <Esc> функцию кнопки Отмена, а клавише <Enter> — Вычислить.
-
Связывает с кнопками вычислить и отмена, а также с переключателями всплывающие подсказки.
|
|
|
Нажатие кнопки вычислить запускает на выполнение процедуру
CommandButtonl Click
|
Определяет, какой переключатель выбран, В зависимости от выбранного переключателя производит действие над выбранными в списке числами. Найденное число выводится в поле Результат.
|
|
|
Нажатие кнопки Отмена запускает на выполнение процедуру
CommandButton2 Click
|
Закрывает диалоговое окно.
|
|
|
|
|
|
'
Private Sub CommandButtonl_Click()
'
' Процедура проведения вычислений с выбранными элементами
' списка в зависимости от выбранной операции
'
Dim i As Integer
Dim n As Integer
'
' i - вспомогательная переменная
' n - играет роль счетчика числа выбранных элементов из списка
'
Dim Сумма As Double
Dim Произведение As Double
Dim Среднее As Double
Dim Результат As Double
'
' Сумма - сумма выбранных элементов из списка
' Произведение - произведение выбранных элементов из списка
' Среднее - среднее арифметическое значение выбранных элементов из списка
' Результат - в эту переменную записывается результат, найденный
' в зависимости от выбранного переключателя
'
'
' При выборе первого переключателя вычисляется сумма выбранных элементов
If OptionButtonl.Value = True Then Сумма = 0
With ListBoxl
For i = 0 To .ListCount - 1
If .Selected(i) = True Then Сумма = Сумма + .List(i)
End If
Next i
End With
Результат = Сумма
End If
'
' При выборе второго переключателя вычисляется произведение
'
выбранных элементов
'
If OptionButton2.Value = True Then Произведение = 1
With ListBoxl
For i = 0 To .ListCount - 1
If .Selected(i) = True Then
Произведение = Произведение * .List(i)
End If
Next i
End With
Результат = Произведение End If
'
' При выборе третьего переключателя вычисляется среднее арифметическое
' значение выбранных элементов
'
If OptionButton3.Value = True Then Среднее = 0
n = 0
With ListBoxl
For i = 0 To .ListCount - 1 i
If .Selected(i) = True Then
n = n + 1
Среднее = Среднее + .List(i)
End If
Next i
End With
Результат = Среднее / n
End If
' Результат выводится в поле Результат
'
TextBoxl.Text = CStr(Format(Результат, "Fixed"))
End Sub
Private Sub CommandButton2_Click()
'
' Процедура закрытия диалогового окна
'
UserForml.Hide
End Sub
'
'
Private Sub UserForm_Initialize()
'
' Процедура инициализации диалогового окна
'
' Заполнение списка и установка режима выбора
' нескольких элементов из списка
'
With ListBoxl
.List = Array(1, 3, 4, 5, 6, 7, 8, 10)
.Listlndex = 0
.MultiSelect = fmMultiSelectMulti
End With
'
' Первоначальный выбор переключателя Сумма при
' инициализации диалогового окна и задание
' текста всплывающих подсказок у переключателей
'
With OptionButtonl
.Value = True
.ControlTipText = "Сумма выбранных элементов"
End With OptionButton2.ControlTipText = "Произведение выбранных элементов"
OptionButton3.ControlTipText = "Среднее значение выбранных элементов"
'
' Поле Результат не доступно для пользователя
'
TextBoxl.Enabled = False
' Назначение клавише <Enter> функции кнопки Вычислить
' и задание текста всплывающей подсказки
With CommanandButtonl
.Default = True
.ControlTipText = "Нахождение результата"
End With
'
' Назначение клавише <Esc> функции кнопки Отмена
' и задание текста всплывающей подсказки
'
CommandButton2.Cancel = True
'
' Задание -заголовка пользовательской формы
'
UserForm1.Caption = "Операции над элементами списка"
UserForm1.Show
End Sub
Самостоятельное задание
Интересной особенностью приводимой процедуры инициализации userForm_initiaiize является то, что заголовок диалогового окна вводится программно при помощи свойства Caption, а не вручную при помощи окна Свойства (Properties).
Стоит также отметить небольшой недостаток этой программы, связанный с тем, что в ней не построен обработчик ошибок. Хотя на первый взгляд кажется, что в программе обработчик ошибок совсем не нужен, это не так. Ошибка может возникнуть, например при вычислениях, если выводимый в списке массив данных содержит как числа, так и строковые константы.
В качестве самостоятельного задания составьте программу нахождения среднего балла студентов, выбранных из списка в диалоговом окне Средний балл (рис. УЗ.2). Список заполните из данных, введенных из диапазона на рабочем листе с помощью свойства RowSource объекта ListBox. Фамилии студентов пусть будут расположены в столбце А, а их оценки в столбце в диапазона с данными о студентах. Создайте в программе обработчик ошибок, который будет проверять, являются ли данные из второго столбца списка с оценками студентов числами. Если хотя бы одно из этих данных не является числом, программа должна проинформировать об этом пользователя с просьбой исправить найденную некорректность. Обратите внимание также на то, чтобы в диалоговом окне средний балл надписи на кнопках ок и Отмена для большей презентабельности были выведены полужирным шрифтом увеличенного размера.
Рис. УЗ.2. Диалоговое окно Средний балл
Знаете ли Вы, что электромагнитное и другие поля есть различные типы колебаний, деформаций и вариаций давления в эфире.
Понятие же "физического вакуума" в релятивистской квантовой теории поля подразумевает, что во-первых, он не имеет физической природы, в нем лишь виртуальные частицы у которых нет физической системы отсчета, это "фантомы", во-вторых, "физический вакуум" - это наинизшее состояние поля, "нуль-точка", что противоречит реальным фактам, так как, на самом деле, вся энергия материи содержится в эфире и нет иной энергии и иного носителя полей и вещества кроме самого эфира.
В отличие от лукавого понятия "физический вакуум", как бы совместимого с релятивизмом, понятие "эфир" подразумевает наличие базового уровня всей физической материи, имеющего как собственную систему отсчета (обнаруживаемую экспериментально, например, через фоновое космичекое излучение, - тепловое излучение самого эфира), так и являющимся носителем 100% энергии вселенной, а не "нуль-точкой" или "остаточными", "нулевыми колебаниями пространства". Подробнее читайте в FAQ по эфирной физике.
|