Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник
Коллекция курьезных вопросов из форумов
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

CheckBox как RadioButton


Михалыч   (15.03.18 19:15

Здравствуйте мастера! Помогите пожалуйста советом. У меня на форме два чекбокса, надо заставить их работать попеременно в стиле радиобатонов(последний не предлагать)). Написал такой код:
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.


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо