Если оператор 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 где записываем следующее:
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. Прокомментировать происходящее можно примерно так, допустим мы установили галочку в четвертом по счету окошке: 1) В начале анализируется выражение стоящее за оператором Вариант (Case), это
Radiogroup1.ItemIndex;
2) Затем просматривается ряд
констант
Из (of)
этого оператора это:
0: c:=10;
1: c:=11;
2: c:=12;
3: c:=13;
4: c:=14; 3) Если константа равная значению (какое именно из всех шести позиций -
OnClick
) найдена, выполняется оператор стоящий за константой, в нашем случае c:=13; 4) Если константа равная значению (какое именно из всех шести позиций -
OnClick
) не найдена,
обработка передается оператору else -
c:=5; В этом можно легко убедиться выделив шестое по счету окошко.
5) И только за тем обработчик выполняет действие
Label1.Caption:=IntToStr(c); отображая содержимое переменной - с.
Кстати, так же как и в
If then else, применение слова else здесь - не является обязательным. При его отсутствии, когда ключу выбора нет соответствия, Case - просто прекращает работу.
Еще один момент относительно синтаксиса. Если для нескольких вариантов нужно выполнять один и тот же оператор, то эти варианты можно перечислить через запятую. Давайте для закрепления материала, рассмотрим еще один не большой примерчик, где все это и разберем. Напишем программку, которая по нажатию клавиши Button
будет определять
четное или не четное число введено в Edit (ввод чисел от 1-10), выдавая при этом соответствующее сообщение. Для этого: 1) Кидаем на нашу форму два компонента
Edit и
Button;
2) В событии OnClick Button пишем наш код: var
a:Integer;
begin
a:=StrToInt(Edit1.Text);
Case a of // Анализруем a;
0: ShowMessage('Ноль это ноль'); //Если a = 0, вывести сообщение - "Ноль - это ноль";
2,4,6,8,10: ShowMessage('Внимание!!! Введено четное число');
{Если a = 2 или 4 или 6 или 8 или 9 или 10, вывести сообщение - "Введено четное число";}
1,3,5,7,9: ShowMessage('Внимание!!! Введено не четное число'); {Если a = 1 или 3 или 5 или 7 или 8 или 9, вывести сообщение - "Введено не четное число";}
end;
end; Запускаем программу, вводим в наш Edit любое число от одного до десяти и нажимаем кнопку. Если вы внимательно изучили данную статью, то комментарии я думаю будут излишни. Теперь придумайте какой нибудь свой примерчик, и для пользы дела поэкспериментируйте с Case самостоятельно.
|