Вопрос № 132843: Здравствуйте дорогие эксперты!
Помогите мне пожалуйста написать программку-головоломку, которая состоит из формы с пятью компонентами CheckBox-ов.
Требует следующее: из изображённых пяти сброшенных флажков установить все. Но при выборе одного...
Вопрос № 132.843
Здравствуйте дорогие эксперты!
Помогите мне пожалуйста написать программку-головоломку, которая состоит из формы с пятью компонентами CheckBox-ов.
Требует следующее: из изображённых пяти сброшенных флажков установить все. Но при выборе одного флажка меняется состояние двух следующих. Пробовала разные варианты, но желаемого результата не выходило. И почему-то при написании следующего:
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if (sender as TCheckbox).Checked=true then (sender as TCheckBox).Enabled:=false
else (sender as TCheckbox).Enabled:=true;
if (sender=checkbox1) and (Checkbox1.Checked=true) then
begin
Checkbox2.Checked:=not CheckBox2.Checked;
Checkbox3.Checked:=not CheckBox3.Checked;
end;
if (sender=checkbox2) and (Checkbox2.Checked=true) then
begin
Checkbox3.Checked:=not CheckBox3.Checked;
Checkbox4.Checked:=not CheckBox4.Checked;
end;
if (sender=checkbox3) and (Checkbox3.Checked=true) then
begin
Checkbox4.Checked:=not CheckBox4.Checked;
Checkbox5.Checked:=not CheckBox5.Checked;
end;
if (sender=checkbox4) and (Checkbox4.Checked=true) then
begin
Checkbox5.Checked:=not CheckBox5.Checked;
end;
end; ,
у меня выходит так, что нажимая на первый компонент, у меня флажки меняются во втором и чётвёртом, и ещё какие-то странности, хотя так просто вроде написано. Может есть какой-то другой фактор поведения моей программы?
Отправлен: 18.04.2008, 15:51
Вопрос задала: Cassie (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: SHERRY
Здравствуйте, Cassie!
Необходимо работать с флажками, как с массивом. Форма является контейнером для флажков. У объектов-контейнеров есть свойство Controls (Элементы управления) - массив элементов управления, находящихся в данном контейнере: Controls[i] as CheckBox.
Итак, у нас 5 CheckBox-ов.
Перейдём к коду прграммы.
var s: boolean; // глобальная переменная
Procedure TForm1.FormCreate(Sender: TObject);
begin
s:=false;
end;
Procedure TForm1.CheckBox1Click(Sender: TObject);
var
index, i, num: integer;
e: boolean;
begin
if s then exit; // Если программа снова вызовет процедуру обработки, будет выполнен оператор Exit - немедленный выход из процедуры
s:=true;
for index:=0 to 4 do // оператор break прерывает выполнение цикла
if Sender=Controls[i] then break; // Определяем какой флажок был переключён
// когда выполнение цикла заканчивается, значение переменной index соответствует переключённому флажку
// Ели значение свойства Checked равно false, флажок сброшен, а если true - установлен. Номер флажка в массиве определяется переменной index
if not (Controls[index] as TCheckBox).Checked then (Controls[index] as TCheckBox).Checked:=true;
else
//изменение состояния "дополнительных флажков". Текущий флажок уже переключён
begin
num:=index+1; // переключение двух следующих флажков
if index=4 then num:=0; // изменение нулевого флажка
// Состояние флажка меняем на противоположное
(Controls[num] as TCheckBox).Checked := not (Controls[num] as TCheckBox).Checked;
// выполняем проверку на выход за пределы массива
inc(num);
if index = 3 then num := 0;
(Controls[num] as TCheckBox).Checked := not (Controls[num] as TCheckBox).Checked;
end;
e := true; // головоломка решена, если установлены все 5 флажков
for i:=0 to 4 do
e:=e and (Controls[i] as TCheckBox).Checked;
//после цикла значение останется равным true, если все флажки установлены
if e then // головоломка решена
ShowMessage('You win!');
s:=false;
end;
Удачи!
--------- Самурай без меча подобен самураю с мечём, только без меча..
Ответ отправил: SHERRY (статус: Студент)
Ответ отправлен: 18.04.2008, 17:02