ЛАБОРАТОРНАЯ РАБОТА №6"Кнопки-переключатели и флажки"
Цели: 1) Изучить элемент управления кнопка-переключатель;
2) Изучить элемент управления "флажок".
Поговорим о кнопках-переключателях. Мы часто встречаемся с
ними во время работы в windows и знаем, что в меню всегда
можно выбрать только одну кнопку - как в радиоприемнике
всегда можно выбрать только одну радиостанцию; выбор новой
автоматически выключает старую.
Если мы хотим поместить на форме два (и более) набора кно-
пок, то нам надо поместить каждый набор внутрь элемента
Frame (рамка). Тогда каждый набор будет мыслится самостоя-
тельным (свой приемник) и в нем все также можно будет выб-
рать (отметить) только один элемент.
Cвойства OptionButton (кнопка-переключатель).
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Name - имя кнопки.
2. Alignment - расположение надписи около кнопки (слева
или справа).
3. Appearance - стиль кнопки (цветная, объемная).
4. Value - выбор кнопки (лог. свойство).
Интуитивно понятно, что самое главное свойство кнопок-пер-
еключателей - Value (значение). Если оно равно True (исти-
на), то кнопка выбрана, а если оно равно False (ложь),
то нет. Возникает вопрос, а как программно отслеживать фа-
кт выбора пользователем той или иной кнопки? Тут у нас два
варианта:
Вариант 1.
~~~~~~~~~~
"Прокликать" каждую кнопку и написать для каждой процедуру
обработки события Click(). Да, придется писать много, но
зато мы получим рабочий код такого типа:
Private Sub Option1_Click()
Option1.Value = True
End Sub
Private Sub Option2_Click()
Option2.Value = True
End Sub
То есть, каждый раз, когда пользователь выбирает ту или
иную радио-кнопку, мы присваиваем ее свойству Value значе-
ние True (истина). Нам нет нужды снимать это свойство с
более ранней кнопки, которая была выбрана - это сделает
система...
Этот способ надежен, но дебилен. Им будут пользоватся тол-
ько те, кто не был на лекции, посвященной массивам.
Вариант 2.
~~~~~~~~~~
Если мы поместим на форму одну кнопку-переключатель, сдел-
аем ее массивом элементов, то мы сможем записать всего од-
ну процудуру для обработки всех элементов массива. Процед-
ура будет иметь вид:
Private Sub Option1_Click(Index As Integer)
Option1(Index).Value = True
End Sub
Видно, что в процедуру приходит параметр Index (целое чис-
ло), который является индексом элемента в массиве. Вот
этому-то элементу и устанавливается свойство Value=True.
Запомните это...
Поговорим о флажках. Как и в случае с радио-кнопками мы
тоже довольно часто встречаемся с ними в различных прилож-
ениях windows, однако они (флажки) имеют свои особенности.
В частности, у них есть три различных состояния свойства
Value:
1) 0 - элемент не отмечен;
2) 1 - элемент отмечен;
3) 2 - элемент недоступен.
Замечание.
~~~~~~~~~~
Посмотрите на рисунок выше. На нем видны 10 флажков, поме-
щенных (на всякий случай) в рамку. Некоторый флажки отмеч-
ены, а некоторые нет... На сегодняшний момент у вас должны
быть отмечены пять из десяти флажков. А как на самом деле?
Долгов нет? Успеваете? Ну-ну...
Пример.
~~~~~~~
Организуем прием данных от пользователя, используя все из-
ученные ранее элементы управления : текстовые поля, метки,
командные кнопки, радио-кнопки, флажки, рамки. (Ничего
не забыли?) Пусть мы собираем данные от пользователя с по-
мощью трех форм.
Итак, давайте по порядку. На первой форме организован при-
ем от пользователя имени и организации, которую он предст-
авляет. Сразу говорим о проблемах, которые поджидают нас
как программистов: пользователь может не ввести имя и наз-
вание организации, а сразу потытается кликнуть на кнопке
"Далее". Пока просто отметим этот факт...
На второй форме мы спрашиваем пользователя о том, принима-
ет ли он наши условия или нет. Чтобы он не ответил - это
его святое право и мы должны запомнить его выбор.
На третьей форме пользователь ставит "галочки" напротив
тех программ, которые (как бы) установлены на его компьют-
ере. Мы также должны каким-то образом отметить для себя
этот факт.
Все наши действия по направлены на то, чтобы собрать инфо-
рмацию про пользователя и объявить его или зарегистрирова-
нным или нет. Понятно, что в данном конкретном случае
ему от этого ни тепло ни холодно, но мы поймем концепцию
регистрации, а это очень важно.
В конце работы нашей программы (приложения) пользователь
должен увидеть примерно такую форму, на которой расположе-
на информация про него и выведена (заветная?) фраза о том,
что он зарегистрирован.
Замечание.
~~~~~~~~~~
Мир жесток и несправедлив - вам придется набирать огромный
код, приведенный ниже. Я ничем не могу вам помочь и, пове-
рьте мне господа студенты, не надо копировать его и встав-
лять в вашу программу. Код надо переписать в тетрадь и на-
бивать в окне кода вашей программы, приспосабливаясь к то-
му, как вы назовете свои элементы управления.
Мне придется комментировать код для каждой формы и одно-
го модуля, который нам надо добавить в проект. В этом мод-
уле мы опишем некоторые переменные, которые должны быть
"видны" во всех формах. Чтобы добавить модуль в проект на-
до выбрать пункт меню: Project | Add module...
Rem Содержимое модуля Module1
Public username As String
Public userorg As String
Public flag As Boolean
Public userprog As String
Комментарии.
~~~~~~~~~~~~
В модуле определены переменные: username - имя пользовате-
ля; userorg - название организации пользователя; flag -
логическая переменная, которая будет отвечать за хране-
ние значения Да/Нет (Истина/Ложь) при ответе пользовате-
ля на вопрос о том, принимает ли он условия соглашения;
userprog - список установленных программ.
Rem Содержимое первой формы Form1
Dim i As Integer
Private Sub Command1_Click()
If Text1 <> "" And Text2 <> "" Then
username = Text1
userorg = Text2
Form2.Show 'Форма 2 стала видна
Unload Form1 'Форма 1 выгрузилась
Else
i = MsgBox("Необходимо вести имя и организацию", vbCritical, "Form1")
End If
End Sub
Комментарии.
~~~~~~~~~~~~
Тут все просто. На первой форме у нас только одна кнопка -
Command1 ("Далее >>"). Если пользователь кликнул на ней, то
надо проверить текстовые поля Text1 (Имя) и Text2 (организ-
ация), - не пустые ли они, - и, в случае удачи, присвоить
переменным username и userorg значения из этих полей. Далее
мы должны выгрузить первую форму и загрузить вторую. Если
хотя бы одно текстовое поле пустое, то мы выдаем пользоват-
елю сообщение "Необходимо вести имя и организацию".
Rem Содержимое второй формы Form2
Rem Назад, с Формы 2 на Форму 1
Private Sub Command1_Click()
Form1.Show 'Форма 1 стала видна
Unload Form2 'форма 2 выгрузилась
End Sub
Rem Далее, с Формы 2 на Форму 3
Private Sub Command2_Click()
Form3.Show 'Форма 3 стала видна
Unload Form2 'Форма 2 выгрузилась
End Sub
Rem Условие принято
Private Sub Option1_Click()
flag = True
End Sub
Rem условие не принято
Private Sub Option2_Click()
flag = False
End Sub
Комменарии.
~~~~~~~~~~~
Тут все понятно. Если пользователь кликнул на кнопке Comm-
and1 ("<< Назад"), то мы выгружаем вторую форму и загружа-
ем первую. Если он кликнул на кнопке Command2
("Вперед >>"), то мы выгружаем вторую форму и загружаем
третью. Если пользователь отметил пункт "Принимаю", то пе-
ременная flag стала равна True; а если он выбрал пункт "Не
принимаю", то False.
Rem Содержимое третьей формы Form3
Dim i As Integer
Rem Назад, с Формы 3 на Форму 2
Private Sub Command1_Click()
Form2.Show
Unload Form2
End Sub
Rem Далее, с Формы 3 на Форму 4
Private Sub Command2_Click()
userprog = "На вашем компьютере установлены программы:" & Chr(10) & Chr(13)
For i = 0 To 3
If Check1(i).Value = 1 Then userprog = userprog & "-" & Check1(i).Caption & Chr(10) & Chr(13)
Next i
Form4.Show
Unload Form3
End Sub
Комментарии.
~~~~~~~~~~~~
Вот тут сложно. Давайте, постараемся... Итак, на форме ес-
ть две кнопки (Caommand1, Command2), но их назвачение так-
ое же, как и на предыдущих формах. Интереснее другое:
как мы будем отслеживать выбор программ (которые установл-
ены на компьютере пользователя) и как нам накопить значен-
ие переменной userprog?
Слава богу, переменная userprog строковая. Способ накопле-
ния таков: когда пользователь кликнул на кнопку "Далее >>"
мы заносим в переменную userproc текст "На вашем компьюте-
ре установлены программы:" + код 10 + код 13 (т.е. переход
на новую строку - не создание новой переменной, а просто
такое форматирование строки userprog). Далее мы начинаем
небольшой цикл (4 шага) и просматриваем каждый флажок
(Windows, Visual Basic, Macromedia Flash, Internet Explor-
er) на предмет "отмеченности", т. е. равенства свойства
Value единице.
Таким образом, после того как пользователь кликнул на кно-
пке "Дальше >>" переменная userprog станет равна сложной
строке, состоящей из фраз "На вашем компьютере установлены
программы:" + "программа" + код 10 + код 13 + "программа"
+ код 10 + код 13 +...
Rem Содержимое четвертой формы form4
Rem Выход из программы
Private Sub Command1_Click()
End
End Sub
Rem При загрузке формы метка набивается данными
Private Sub Form_Activate()
If flag = True Then
Label1 = Label1 & Chr(10) & Chr(13) & Chr(10) & Chr(13)
Label1 = Label1&"Пользователь-"&username&Chr(10)&Chr(13)&Chr(10)&Chr(13)
Label1 = Label1&"Организация-"&userorg&Chr(10)&Chr(13)&Chr(10)&Chr(13)
Label1 = Label1 & "Вы приняли условие нашего лицензионного соглашения и поэтому вы являетесь зарегистрированным пользователем" & Chr(10) & Chr(13)
Else
Label1 = "К сожалению, наша компания не будет сотрудничать с вами, так как вы не приняли условия лицензионного соглашения"
End If
End Sub
Комменатрии.
~~~~~~~~~~~~
Четвертая форма состоит из одной метки и командной кнопки,
которая отвечает за выход из программы. При активации фор-
мы начинает работать процедура Form_Activate(), в которой,
собственно, и происходит набивка и вывод текста регистрац-
ии пользователя. Кнопка "Ок" закрывает все приложение.
Строка, которая набивается в метку на четвертой форме
(Label1), состоит из данных о: пользователе, организации и
о факте принятия им условий соглашения. Если пользова-
тель не принимал условия, то выводится соответствующая на-
дпись.
Задания к лабораторной работе №6
1. Прочитать, законспектировать работу.
2. Проверить пример.