Оператор Case (Условия, условные операторы в Delphi)
Если оператор If и конструкция If then else, — предназначены для выбора одного из двух действий, то оператор Case и конструкция Case of else — предназначены для выбора одного из любого количества вариантов.
Перевести конструкцию Case… of… else… на русский язык, можно примерно так:
Вариант… Из… Иначе…
Понять что это все означает, нам поможет следующий пример.
Работать будем с компонентом RadioGroup, с вкладки Standart и нам нужно, так его настроить, чтобы при выборе одной из скажем шести позиций c 1 по 5, переменная с принимала значения от 10 до 14, а при выборе шестой, срабатывало else и переменной присваивалось значение, скажем — 5.
Для этого:
1) Кидаем на форму компоненты Label и RadioGroup;
2) Выбираем свойство Items у компонента RadioGroup, где прописываем позиции, от одного до шести, а свойство ItemIndex устанавливаем в 0, так-как нумерация строк в компоненте начинается с нуля;
3) Создаем обработчик событий RadioGroup1Click на RadioGroup где записываем следующее:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
var c:Integer; begin case Radiogroup1.ItemIndex of 0: c:=10; 1: c:=11; 2: c:=12; 3: c:=13; 4: c:=14; else c:=5; end; Label1.Caption:=IntToStr(c); end; |
Запускаем проект и наблюдаем, что если мы выбираем окошки с 1 по 5, для с присваивается значения от 10 до 14 соответственно, а если окошко 6 тогда 5.
Прокомментировать происходящее можно примерно так, допустим мы установили галочку в четвертом по счету окошке:
- Вначале анализируется выражение стоящее за оператором Вариант (Case), это Radiogroup1.ItemIndex;
- Затем просматривается ряд констант Из (of) этого оператора это:
0: c:=10;
1: c:=11;
2: c:=12;
3: c:=13;
4: c:=14;
- Если константа равная значению (какое именно из всех шести позиций — OnClick ) найдена, выполняется оператор стоящий за константой, в нашем случае c:=13;
- Если константа равная значению (какое именно из всех шести позиций — OnClick ) не найдена, обработка передается оператору else — c:=5; В этом можно легко убедиться выделив шестое по счету окошко.
- И только затем обработчик выполняет действие Label1.Caption:=IntToStr(c); отображая содержимое переменной — с.
Кстати, так же как и в If then else, применение слова else здесь — не является обязательным. При его отсутствии, когда ключу выбора нет соответствия, Case — просто прекращает работу.
Еще один момент относительно синтаксиса. Если для нескольких вариантов нужно выполнять один и тот же оператор, то эти варианты можно перечислить через запятую. Давайте для закрепления материала, рассмотрим еще один небольшой пример, где все это и разберем.
Напишем программу, которая по нажатию клавиши Button будет определять четное или не четное число введено в Edit (ввод чисел от 1-10), выдавая при этом соответствующее сообщение. Для этого:
1) Кидаем на нашу форму два компонента Edit и Button;
2) В событии OnClick Button пишем наш код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
var a:Integer; begin a:=StrToInt(Edit1.Text); Case a of // Анализруем a; //Если a = 0, вывести сообщение - "Ноль - это ноль" 0: ShowMessage('Ноль это ноль'); //Если a = 2 или 4 или 6 или 8 или 9 или 10, вывести сообщение - "Введено четное число" 2,4,6,8,10: ShowMessage('Внимание!!! Введено четное число'); //Если a = 1 или 3 или 5 или 7 или 8 или 9, вывести сообщение - "Введено нечетное число" 1,3,5,7,9: ShowMessage('Внимание!!! Введено нечетное число'); end; end; |
Запускаем программу, вводим в наш Edit любое число от одного до десяти и нажимаем кнопку.