В данном
уроке создается приложение, на примере которого вы сможете научиться:
Создадим
приложение, которое позволит выбрать несколько чисел, выводимых В списке В диалоговом
Окне Операции над элементами списка (рис. У3.1).
В группе
Операция следует установить один из переключателей: сумма, произведение или
среднее, чтобы указать, какая операция будет выполняться над выбранными числами.
Нажатие кнопки вычислить должно привести к выполнению операции и выводу результата
в поле Результат.
Рис.
У3.1. Диалоговое окно Операции над элементами списка
Обсудим,
как приведенная ниже программа решает перечисленные задачи и что происходит
в программе.
UserForm Initialize |
|
||
Нажатие кнопки
вычислить запускает на выполнение процедуру 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. Диалоговое окно Средний балл
Дело в том, что в его постановке и выводах произведена подмена, аналогичная подмене в школьной шуточной задачке на сообразительность, в которой спрашивается:
- Cколько яблок на березе, если на одной ветке их 5, на другой ветке - 10 и так далее
При этом внимание учеников намеренно отвлекается от того основополагающего факта, что на березе яблоки не растут, в принципе.
В эксперименте Майкельсона ставится вопрос о движении эфира относительно покоящегося в лабораторной системе интерферометра. Однако, если мы ищем эфир, как базовую материю, из которой состоит всё вещество интерферометра, лаборатории, да и Земли в целом, то, естественно, эфир тоже будет неподвижен, так как земное вещество есть всего навсего определенным образом структурированный эфир, и никак не может двигаться относительно самого себя.
Удивительно, что этот цирковой трюк овладел на 120 лет умами физиков на полном серьезе, хотя его прототипы есть в сказках-небылицах всех народов всех времен, включая барона Мюнхаузена, вытащившего себя за волосы из болота, и призванных показать детям возможные жульничества и тем защитить их во взрослой жизни. Подробнее читайте в FAQ по эфирной физике.