Победить CheckBox

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Победить CheckBox

Re: Победить CheckBox

Игорь Акопян » 03 сен 2007, 17:56

BBB, я ж не говорю. что ничего менять не надо :) эт я так.... для обозначения масштаба творчества ;)
somewhere, тоже вон расширяет ;)

Re: Победить CheckBox

somewhere » 30 авг 2007, 10:08

Никто вообще-то не мешает перебрать все контролы (они же чекбоксы) с ненулевыми тэгами и делать проверку в цикле. Тогда уже не будет зависимости кода от их числа, примерно как это сделано в обычном RadioGroup

Re: Победить CheckBox

BBB » 30 авг 2007, 09:45

Игорь Акопян писал(а):так проще добавлять чекбоксы :)
Но все равно пр-ру TForm1.CBClick при добавлении нового чек-бокса придется чуть модифицировать: добавлять строки вида:

cb4.Checked := (Ind = 4);

;-)

Re: Победить CheckBox

Игорь Акопян » 29 авг 2007, 15:42

в качестве тринировки извращения можно всё запихать в одну процедуру :)
кидаем на форму 3 Чекбокса, вешаем всех на одну процедуру:
[syntax='delphi']
TForm1 = class(TForm)
cb1: TCheckBox;
cb2: TCheckBox;
cb3: TCheckBox;
procedure CBClick(Sender: TObject);
private
{ Private declarations }
Ind: byte;
Changing: boolean;
public
{ Public declarations }
end;
----skip-------
procedure TForm1.CBClick(Sender: TObject);
begin
if not Changing then
begin
Changing := true;
try
if not (Sender as TCheckBox).Checked then Abort;
ind := (Sender as TComponent).Tag;
cb1.Checked := Ind = 1;
cb2.Checked := Ind = 2;
cb3.Checked := Ind = 3;
finally
Changing := false;
end;
end;
end;
[/syntax]
так проще добавлять чекбоксы :)

Re: Победить CheckBox

ElenaA » 28 авг 2007, 09:48

Спасибо!!!!
Работает!!!!!

Re: Победить CheckBox

BBB » 27 авг 2007, 16:18

Делал подобное, но с двумя кнопками. Т.е. может быть "включено" одновременно не более одной.
С тремя, полагаю, аналогично

Пусть есть три кнопки на диалоговом окне:
cb_1: TCheckBox;
cb_2: TCheckBox;
cb_3: TCheckBox;

Вешаем на них (на каждую) процедуры-обработчики OnClick.
Смысл обработчика: если кнопка включается, то принудительно
выключить соседние. Если выключается, то ничего дополнительно
не предпринимать.

Код: Выделить всё

procedure TMyForm.cb_1YClick(Sender: TObject);
begin
 // Если кнопка включена, то выключаем "соседние" кнопки
  if (cb_1.Checked) then begin
    cb_2.Checked := FALSE;
    cb_3.Checked := FALSE;
  end;
end;

procedure TMyForm.cb_2YClick(Sender: TObject);
begin
 // Если кнопка включена, то выключаем "соседние" кнопки
  if (cb_2.Checked) then begin
    cb_1.Checked := FALSE;
    cb_3.Checked := FALSE;
  end;
end;

procedure TMyForm.cb_3YClick(Sender: TObject);
begin
 // Если кнопка включена, то выключаем "соседние" кнопки
  if (cb_3.Checked) then begin
    cb_1.Checked := FALSE;
    cb_2.Checked := FALSE;
  end;
end;

Re: Победить CheckBox

ElenaA » 27 авг 2007, 12:45

RadioGroup не пойдет, к сожалению...
checkbox2.checked:=false;
checkbox3.checked:=false; - если бы было все так просто... При таком коде, конечно, два других очищаются, но вот первый выбирается не всегда - он может остаться пустым. При попытке его "загалочить" программно, прога зацикливается и сливается.

Re: Победить CheckBox

Хыиуду » 27 авг 2007, 12:36

Используйте RadioGroup с дополнительным вариантом "ни один из них". Можно на него еще код повесить: если выбран 4 вариант, сделать itemindex:=-1;
Или на каждый из трех чекбоксов повесить код, который очищает два других. Типа
procedure Checkbox1Click(...);
begin
checkbox2.checked:=false;
checkbox3.checked:=false;
end;

Победить CheckBox

ElenaA » 27 авг 2007, 12:23

Всем привет!
На форме есть 3 штуки CheckBox. Нужно сделать так, чтобы выбран был только один из них, либо все три остались бы не выбранными (это важно!). То есть, нужно, чтобы галочка "перескакивала" бы с одного на другой. Бьюсь 3-й день, мозги скрипят...
Help!!!

Вернуться к началу