Флажок (CheckBox)
Смысл флажков. Пример использования флажков (CheckBox) вы видите на Рис. 18.1. Если из рисунка вам непонятен их смысл, создайте проект, поместите на форму из Toolbox несколько флажков, поменяйте им в соответствии со своими вкусами свойство Text, запустите проект, пощелкайте внутри квадратиков. Флажок мы устанавливаем (ставим галочку) тогда, когда хотим сказать «да», а снимаем (делаем пустым), когда хотим сказать «нет». При помощи клавиатуры вы можете путешествовать между флажками клавишей Tab, а менять установку флажка – клавишей пробела. Можно безо всяких вредных последствий устанавливать и снимать любой флажок сколько угодно раз. В этом и состоит удобство флажков: перед тем, как совершить решающее нажатие на кнопку «Заказать», можно поддаться сомнениям и как угодно устанавливать флажки или, передумав, снимать.
Рис. 18.1
Поместите на форму флажок. Загляните в окно свойств флажка. Там вы увидите несколько знакомых нам свойств, присущих большинству элементов управления. Поэкспериментируйте с цветами, шрифтом флажка. Уберите с флажка текст и придайте картинку его свойству Image. Получается, что можно отлично обойтись и без текста, если картинка верно передает смысл флажка.
Там же вы увидите несколько свойств, специфичных для флажка. Нас интересуют некоторые из них:
При свойстве Appearance равном Button флажок выглядит, как нажатая или отжатая кнопка.
У каждого флажка мы видим два состояния (установлен – снят). Им соответствуют два значения свойства Checked: True и False.
Если вы склонны к неопределенностям, то можете настроить любой флажок на три состояния. Для этого установите свойство ThreeState в True. Все три состояния флажка являются значениями свойства (перечисления) CheckState. Вот они:
Состояние | Смысл
| Внешний вид флажка | |||
Checked | Установлен | В белом квадратике – галочка | |||
Unchecked | Снят | Белый квадратик пуст | |||
Indeterminate | Не определен | В сером квадратике – галочка |
Пример программы. Для изучения работы флажков создайте проект. Поместите на форму пару флажков, пару текстовых полей и пару кнопок. Флажки получают имена CheckBox1, CheckBox2. Работу с флажками иллюстрирует следующая программа:
' При загрузке формы задаем количество состояний и начальное состояние каждому флажку:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
CheckBox1.ThreeState
= False '1 флажку разрешается устанавливать одно состояние из двух
CheckBox1.Checked = True
CheckBox2.ThreeState
= True '2 флажку разрешается устанавливать одно состояние из трех
CheckBox2.CheckState
= CheckState.Indeterminate
End Sub
'Определяем состояние первого флажка:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If CheckBox1.Checked Then TextBox1.Text = "Первый флажок установлен" _
Else TextBox1.Text = "Первый флажок снят"
End Sub
'Определяем состояние второго флажка:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Select Case CheckBox2.CheckState
Case CheckState.Checked
TextBox2.Text = "Второй флажок установлен"
Case CheckState.Unchecked
TextBox2.Text = "Второй флажок снят"
Case CheckState.Indeterminate
TextBox2.Text = "Второй флажок не определен"
End Select
End Sub
Здесь по нажатии на кнопку Button1 мы видим в поле TextBox1 состояние первого флажка. Аналогично по нажатии на кнопку Button2 мы видим в поле TextBox2 состояние второго флажка.
Мгновенная реакция. Загляните в события флажка (как это делается, написано в 3.11). Если вы хотите, чтобы компьютер в нашем проекте мгновенно реагировал на изменение состояния флажков, выберите такие события:
Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles CheckBox1.CheckedChanged
Debug.WriteLine("Изменили состояние первого флажка")
End Sub
Private Sub CheckBox2_CheckStateChanged(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles CheckBox2.CheckStateChanged
Debug.WriteLine("Изменили состояние второго флажка")
End Sub
Задание 1.
«Виртуальный ресторан». Создайте проект (Рис. 18.1), который бы при нажатии на кнопку «Заказать» печатал в окне Output список выбранных блюд. Указание: поскольку блюд много, создайте коллекцию флажков и используйте цикл For Each.