Переключатель из радиокнопок (RadioButton)
Вы, возможно, знакомы с кнопками переключения диапазонов на радиоприемниках. Там в ряд стоят несколько кнопок. Нажатой в каждый момент может быть только одна. Нажимая какую-то кнопку, вы тем самым отжимаете ту, что была нажата раньше.
Аналогичный элемент управления есть и в VB. Называется он RadioButton (радиокнопка). Применяется он там, где нужно выбрать только одну из нескольких возможностей. Например, пусть персонажу вашей игры нужно выбрать одно оружие из четырех. На Рис. 18.2 вы видите группу из 4 соответствующих радиокнопок. Назовем такую группу переключателем. Здесь тоже, как и в случае с флажками, можно сколько угодно колебаться, передумывать и переключаться между радиокнопками, прежде, чем сделать решающее нажатие на кнопку «Берем оружие».
Рис. 18.2
Создайте проект в соответствии с этим рисунком. Запустите проект. Пощелкайте внутри кружочков. Вы видите, что из всех радиокнопок в любой момент времени только одна может быть выбрана, остальные автоматически отключаются.
А что делать, если вам на той же форме нужно организовать еще один переключатель, например, для выбора поля сражения? Для этого нужно каждую группу радиокнопок поместить в свой контейнер, например, рамку или панель (см. Рис. 18.3).
Рис. 18.3
В противном случае из всех семи радиокнопок в любой момент времени будет выбрана только одна.
Вы скажете, что радиокнопки и флажки – это одно и то же. Неверно. Флажков в любой момент времени может быть установлено сколько угодно, а из радиокнопок переключателя в любой момент времени может быть выбрана только одна.
Так же, как и у флажка, главным свойством радиокнопки является свойство Checked, которое имеет значение True, если кнопка выбрана, и False – если нет. Поэтому и программы работы с радиокнопками очень похожи на программы работы с флажками:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If RadioButton1.Checked Then
TextBox1.Text = "Переключатель в положении 1"
ElseIf RadioButton2.Checked Then
TextBox1.Text = "Переключатель в положении 2"
ElseIf RadioButton3.Checked Then
TextBox1.Text = "Переключатель в положении 3"
End If
End Sub
Если в переключателе много радиокнопок, то вышеприведенная процедура получается длинной. Можно ее укоротить применением цикла. Вот процедура для поиска выбранной радиокнопки в рамке:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim Радиокнопка As RadioButton
For Each Радиокнопка In GroupBox1.Controls
If Радиокнопка.Checked
Then Debug.WriteLine(Радиокнопка.Text) : Exit For
Next
End Sub
Поэкспериментируйте с цветами, шрифтом радиокнопок. При свойстве Appearance равном Button радиокнопка выглядит, как нажатая или отжатая кнопка. Вы можете убрать с радиокнопки текст и придать ей картинку (задать свойство Image). Получается, что можно выбирать не только из текста, но и из картинок.
Задание 2.
Снабдите проект на Рис. 18.3 кнопкой, при нажатии на которую распечатывается выбранное оружие и выбранное поле сражения.