Конференция "Начинающим" » CheckBox как RadioButton
 
  • Михалыч (15.03.18 19:15) [0]
    Здравствуйте мастера! Помогите пожалуйста советом. У меня на форме два чекбокса, надо заставить их работать попеременно в стиле радиобатонов(последний не предлагать)). Написал такой код:
    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;
    Но клик на любом из контролов заставляет их работать почем-то одновременно включаясь и выключаясь.. предполагаю что один воздействует на другой в цикле.. (( как правильно реализовать попеременую их работу?
  • Михалыч (15.03.18 19:17) [1]
    вернее код такой у меня(последн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;
  • RWolf © (15.03.18 20:08) [2]
    Переключение чекбокса, даже программное, вызывает соответствующий обработчик. Поэтому на время программной смены состояния чекбоксов нужно запрещать работу их обработчиков. Как именно — это детали: можно флаг смены состояния завести, можно свойства OnClick отключать, можно наличие фокуса на чекбоксах проверять.
  • Михалыч (15.03.18 20:13) [3]
    >RWolf  Спасибо, буду пробовать что-то, можт вдруг получится...
  • Leonid Troyanovsky © (16.03.18 11:32) [4]

    > Михалыч   (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.
  • Leonid Troyanovsky © (16.03.18 11:36) [5]

    > Use TGroupBox, Luke.

    TRadioGroup, sorry.
Есть новые Нет новых   [134427   +35][b:0][p:0.001]