Выбор элемента с помощью переключателя

Выбор элемента с помощью переключателя

Как в жизни, так и в программном обеспечении, есть много взаимоисключающих вариантов. Покупая мороженое, вы выбираете либо с изюмом, либо с орехами, либо в фруктами, но никогда не все три сразу. Покупая платье или брюки, вы всегда покупаете только те вещи, которые подходят вам по размеру. А когда вы собираетесь жениться на Анне, о других претендентках вы не думаете (Анна должна этому радоваться!).

В Windows для изображения взаимно исключающих вариантов выбора используются так называемые переключатели. Это небольшие круглые кнопки, которые работают как нажимные кнопки на радиоприемниках в автомобилях. Одновременно можно слушать только одну радиостанцию. На рис. 10.19 показан типичный набор переключателей.

Рис. 10.19. Переключатели в действии

Переключателей всегда должно быть несколько, но выбрать можно только один из них. Если вы выберете один из переключателей, все остальные автоматически останутся не выбранными.

Не беспокойтесь о том, как создать группу переключателей. Все, что вам необходимо сделать, - это разместить кнопки в одном месте в форме. VBA автоматически объединит их в группу. При запуске программы будет выбран только один переключатель.

А что это за странные слова: переключатели должны быть размещены "в одном месте формы"? Конечно, это не официальная терминология VBA, но можно сказать следующее: одна часть формы является самой формой. Каждая добавленная вами рамка элемента управления создаст другую часть формы. И каждая вкладка элемента управления, состоящего из нескольких вкладок, также является отдельной частью формы (о элементах управления, состоящих из нескольких вкладок, которые создаются для ноутбуков и которые похожи на обычные диалоговые окна Windows, я расскажу в главе 19). Можно разместить рамку внутри другой рамки или на вкладке элемента управления, состоящего из нескольких вкладок. Каждая вложенная рамка занимает свою часть формы.

Если в форме есть несколько рамок, VBA рассматривает переключатели, которые не находятся внутри любой рамки, как одну группу, а переключатели, находящиеся в рамке, - как отдельную группу. На рис. 10.20 видно, что я имею в виду.

Рис. 10.20. Три отдельные группы переключателей

Для того чтобы выбрать переключатель, достаточно просто щелкнуть на нем. Однако обычно после выбора переключателя немедленно ничего не происходит. Диалоговое окно останется открытым. Это позволит пользователю еще раз подумать и, может быть, выбрать другой переключатель. И только после того, как пользователь щелкнет на кнопке ОК, он подтвердит свой выбор.

Перед программистом стоит задача: как понять, какой переключатель выбран? Для этого вы должны проверить значение свойства Va l ue для каждого переключателя в группе. Правда, есть способ обойти это. Для этого можно воспользоваться инструкцией If. . .ElseIf:

If OptionEuttonl.Value = True Then

ChosenOption = "Bill"

ElseIf OptionButton2.Value = True Then

ChosenOption = "Bob"

ElseIf OptionButton3.Value = True Then

ChosenOption = "Barney"

Else

ChosenOption = ""

End If

Переключатели полезны, когда приходится иметь дело с большим количеством взаимоисключающих вариантов. Однако, когда необходимо выбрать несколько вариантов, лучше воспользоваться флажками или кнопками с фиксацией. Флажки и кнопки с фиксацией используются для выбора одного из пары противоположных вариантов, например Yes (Да) или No (Нет). On или Off, True или False и Stay или Leave. На практике отличие между флажком и кнопкой с фиксацией состоит в том, как они выглядят.

* Флажок - это маленький квадратик, в котором появляется галочка, если выбран параметр Yes, On или True. (Если квадратик пустой, значит флажок сброшен.)

* Кнопка с фиксацией похожа на обычную кнопку. Единственное отличие состоит в том, что, когда вы щелкаете на ней, она остается нажатой.

На рис. 10.21 показаны несколько флажков и кнопок с фиксацией.

Рис. 10.21. Флажки и кнопки с фиксацией

Флажки часто объединяют в группы для того, чтобы составить список не взаимоисключающих вариантов выбора. На рис. 10.22 приведен пример флажков.

Обратите внимание на то, что каждый отдельный флажок показывает, выбран ли элемент, возле которого он установлен.

Рис. 10.22. Устанавливать и сбрасывать флажки можно независимо

Как обычно, свойство Value содержит информацию, относящуюся к выбору параметров пользователем. Если флажок установлен, свойство Value равно True, если флажок сброшен, свойство Value равно False. Такая же ситуация и с кнопками с фиксацией: свойство Value равно True; если кнопка нажата. В противном случае свойство Value равно False. Для выбора параметров можно воспользоваться следующим кодом:

If tglLightSwitch.Value = True Then

TurnLightOff

Else

TurnLightsOff

End If

[ не всегда код автора безупречен…

If tglLightSwitch.Value = True Then

аналогичен

If tglLightSwitch.Value Then

w_cat ]

Если вы просто хотите изменить текущее состояние флажка или кнопки с фиксацией, лучше всего воспользоваться оператором Not. В следующем коде флажок устанавливается, если он был сброшен, и сбрасывается, если он был установлен:

ChkYesOrNo.Value = Not chkYesOrNo.Value