PDA

Показать полную графическую версию : Оператор If


stronger
22-09-2013, 21:37
Здравствуйте. У меня такая ситуация: в общем есть две формы . на 1 есть 3 радиобуттона и если нажать на button готово появляется 2 форма, и там как бы уже готовая анкета с выбранными ответами я хочу чтобы в label было значение выбранного радиобутона, пишу так:

procedure TForm4.FormCreate(Sender: TObject);
begin
{Если выбран Radiobutton3}
If not (form2.radiobutton1.checked) and not (form2.RadioButton2)
then Label2.Caption:='>60';
{Если выбран Radiobutton1}
if not (form2.RadioButton2.Checked) and not (form2.RadioButton3.Checked)
then Label2.Caption:='<18';
{Если выбран Radiobutton2}
if not (form2.RadioButton1.Checked) and not (form2.RadioButton3.Checked)
then Label2.Caption:='18-60'

Но программа все равно выполняет только последний If. Не могу сделать так чтобы выполнялись все три IF в одной процедуре.
ПОМОГИТЕ,ПОЖАЛУЙСТА,НАЙТИ ВЫХОД

LilLoco
23-09-2013, 08:37
stronger, а зачем для проверки, что выбран первый бокс - проверять, что не выбраны другие 2? Проще же проверить единожды?
Нужно сделать так (синтаксис не помню):

if (checkbox1.Checked)
begin
label2.Caption = '111111';
end
else if (checkbox2.Checked)
begin
label2.Caption = '222222';
end
else if (checkbox3.Checked)
begin
label2.Caption = 333333';
end

Как - то вот так.

stronger
24-09-2013, 17:20
LilLoco, смотрел так тоже уже, вообще не работает, то есть label не присваивает значение, поэтому решил попробовать так как написал выше и так заработала, но выполняет только последнее условие

LilLoco
24-09-2013, 17:28
stronger, Так вы этот код поместите на в модуль формы где расположены чекбоксы, например, на событие клика по кнопке. Создайте экземпляр новой формы (где отчет), и этому экземпляру присвойте лейблам значения. Потом отобразите форму.
Уже забыл как это выглядит в делфи. Но в теории принцип таков.

opel431
24-09-2013, 18:14
А почему не использовать оператор case?

Сase RadioButton.ItemIndex of (или Сase CheckBox.State of)
0: // действие
1: // действие
2: // действие
end;

В коде LilLoco, можно убрать все else - фактически проверка без дополнительных вариантов, да и и конструкция begin...end, при проверке всего одного условия, станет излишней.

LilLoco
25-09-2013, 08:18
opel431, я не думаю, что begin...end, при проверке всего одного условия, станет излишней. »
- несет какое - либо неудобство. В дальнейшем, если придется добавить какое либо "действие" - не нужно будет добавлять их. Думаю - это "дело вкуса".

убрать все else - фактически проверка без дополнительных вариантов »
А смысл проверять остальные варианты, если логически - RadioButton может быть выбран только один.
Ну в коде с Checkbox я погорячился конечно, за что прошу прощения.

opel431
25-09-2013, 10:25
Да в принципе все так, но при одном заданном условии, как в вопросе, достаточно и просто ветки If...Then, а ветка Else нужна будет или для обработке исключительного случая, или для сообщения.




© OSzone.net 2001-2012