-
Здравствуйте мастера! Помогите пожалуйста советом. У меня на форме два чекбокса, надо заставить их работать попеременно в стиле радиобатонов(последний не предлагать)). Написал такой код: if CheckBox1.Checked=True then CheckBox2.Checked:=False; if CheckBox1.Checked=False then CheckBox2.Checked:=True; if CheckBox2.Checked=True then CheckBox1.Checked:=False; if CheckBox2.Checked=True then CheckBox1.Checked:=False; Но клик на любом из контролов заставляет их работать почем-то одновременно включаясь и выключаясь.. предполагаю что один воздействует на другой в цикле.. (( как правильно реализовать попеременую их работу?
-
вернее код такой у меня(последнzя строка немного иначе): if CheckBox1.Checked=True then CheckBox2.Checked:=False; if CheckBox1.Checked=False then CheckBox2.Checked:=True; if CheckBox2.Checked=True then CheckBox1.Checked:=False; if CheckBox2.Checked=False then CheckBox1.Checked:=True;
-
Переключение чекбокса, даже программное, вызывает соответствующий обработчик. Поэтому на время программной смены состояния чекбоксов нужно запрещать работу их обработчиков. Как именно — это детали: можно флаг смены состояния завести, можно свойства OnClick отключать, можно наличие фокуса на чекбоксах проверять.
-
>RWolf Спасибо, буду пробовать что-то, можт вдруг получится...
-
> Михалыч (15.03.18 20:13) [3]
type THackCB = class (TButtonControl);
procedure TForm1.CheckBox1Click(Sender: TObject); begin with THackCB(CheckBox2) do try ClicksDisabled := True; Checked := not CheckBox1.Checked; finally ClicksDisabled := False; end; end;
procedure TForm1.CheckBox2Click(Sender: TObject); begin with THackCB(CheckBox1) do try ClicksDisabled := True; Checked := not CheckBox2.Checked; finally ClicksDisabled := False; end; end;
Bad design, IMHO.
Use TGroupBox, Luke.
-- Regards, LVT.
-
> Use TGroupBox, Luke.
TRadioGroup, sorry.
|