Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 208

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
У меня на форме расположены 4 компонента DBCheckBox, связанные с одной таблицей базы данных Paradox. Подскажите, пожалуйста, как сделать, чтобы при выборе DBCheckBox1 и DBCheckBox2 появлялась возможность выбора DBCheckBox3 или DBCheckBox4 (только одного из них), если же выбран только DBCheckBox1 или DBCheckBox2 или ни один из них не выбран возможность выбрать DBCheckBox3 или DBCheckBox4 должна отсутствовать.

Anya Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задала: Anya (статус: Посетитель)
Вопрос отправлен: 18 апреля 2011, 11:28
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

Первое: если нужно выбирать только один из двух TDBCheckBox, то замени их на одну TDBRadioGroup и жизнь станет легче.
Второе: заблокировать RadioGroup, если не выбраны DBCheckBox1 и DBCheckBox2:

RadioGroup.Enabled:= DBCheckBox1.Checked and DBCheckBox2.Checked;
if not RadioGroup.Enabled
  then RadioGroup.ItemIndex:= -1;
Этот кусок кода можно вставить в обработчик OnClick обоих DBCheckBox или куда-нить в Application.OnIdle.

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 18 апреля 2011, 11:40
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 14; последнее сообщение — 18 апреля 2011, 15:55; участников в обсуждении: 2.
Anya

Anya (статус: Посетитель), 18 апреля 2011, 11:46 [#1]:

Спасибо за ответ. А если нужно, чтобы все 4 компонента имели одинаковый внешний вид?
min@y™

min@y™ (статус: Доктор наук), 18 апреля 2011, 11:54 [#2]:

Цитата (Anya):

А если нужно, чтобы все 4 компонента имели одинаковый внешний вид?

Ну тогда, чтобы невозможно было выбрать сразу 2 чекбокса, придётся где-то (в обработчиках OnClick) написать условие:
if DBCheckBox3.Checked
  then DBCheckBox4.Checked:= False;
и то же самое для DBCheckBox4 (только в другом обработчике).
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Anya

Anya (статус: Посетитель), 18 апреля 2011, 12:00 [#3]:

Спасибо! Попробую так сделать.
Anya

Anya (статус: Посетитель), 18 апреля 2011, 13:34 [#4]:

Написала 2 обработчика событий, но программа все равно работает неправильно.
procedure TForm1.DBCheckBox3Click(Sender: TObject);
begin
DBCheckBox3.Enabled:= DBCheckBox1.Checked and DBCheckBox2.Checked;
if DBCheckBox3.Checked
then DBCheckBox4.Checked:= False;
end;
 
procedure TForm1.DBCheckBox4Click(Sender: TObject);
begin
DBCheckBox4.Enabled:= DBCheckBox1.Checked and DBCheckBox2.Checked;
if DBCheckBox4.Checked
then DBCheckBox3.Checked:= False;
end;
min@y™

min@y™ (статус: Доктор наук), 18 апреля 2011, 13:44 [#5]:

Цитата (Anya):

но программа все равно работает неправильно.

Значит написала неправильно. Убери оттуда DBCheckBox_xxx.Enabled:= и засунь в соответствующие обработчики OnClick DBCheckBox1 и DBCheckBox2.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Anya

Anya (статус: Посетитель), 18 апреля 2011, 14:16 [#6]:

Сейчас все уже гораздо лучше, но хочется, чтобы при выборе DBCheckBox1 и DBCheckBox2 галочка в DBCheckBox3 не появлялась автоматически, а только в том случае, если пользователь выберет этот пункт. А то когда я переставляю галочку в DBCheckBox4, а потом пытаюсь убрать ее вовсе, галочки исчезают и из DBCheckBox1 и DBCheckBox2. Вообщем, программа работает не четко.
min@y™

min@y™ (статус: Доктор наук), 18 апреля 2011, 14:43 [#7]:

Цитата (Anya):

чтобы при выборе DBCheckBox1 и DBCheckBox2 галочка в DBCheckBox3 не появлялась автоматически

Ну дык сбрасывай свойство
DBCheckBox3.Checked:= False;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Anya

Anya (статус: Посетитель), 18 апреля 2011, 14:51 [#8]:

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

Anya (статус: Посетитель), 18 апреля 2011, 15:02 [#9]:

У меня возник еще один вопрос: хочу связать DBLookup ComboBox с DBRadioGroup таким образом, чтобы при выборе какого-то значения DBLookupComboBox можно было бы выбрать один из вариантов DBRadioGroup. Если же ни одно значение не выбрано, то варианты DBRadioGroup соответственно недоступны. Написала обработчик, но получается все ровным счетом наоборот.
procedure TForm1.DBLookupComboBox2Click(Sender: TObject);
begin
DBRadioGroup1.Enabled:=DBLookupComboBox2.ListFieldIndex>0;
if not DBRadioGroup1.Enabled
then DBRadioGroup1.ItemIndex:=-1;
end;
min@y™

min@y™ (статус: Доктор наук), 18 апреля 2011, 15:13 [#10]:

Цитата (Anya):

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

Значит где-то в коде ошибка.

Цитата (Anya):

Написала обработчик, но получается все ровным счетом наоборот.

А свойство DBLookupComboBox2.ListFieldIndex случайно не с нуля считается?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Anya

Anya (статус: Посетитель), 18 апреля 2011, 15:21 [#11]:

С нуля. Так я и пишу, что если DBLookupComboBox2.ListFieldIndex>0, т. е. выбрано какое-то значение, тогда DBRadioGroup1.Enabled, если DBLookupComboBox2.ListFieldIndex=0, тогда not DBRadioGroup1.Enabled. Или я что-то не понимаю?
min@y™

min@y™ (статус: Доктор наук), 18 апреля 2011, 15:34 [#12]:

Цитата (Anya):

Или я что-то не понимаю?

Если нумерация с нуля и значение не выбрано, тогда DBLookupComboBox2.ListFieldIndex будет равен -1.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Anya

Anya (статус: Посетитель), 18 апреля 2011, 15:40 [#13]:

В этом случае тоже не получается.
min@y™

min@y™ (статус: Доктор наук), 18 апреля 2011, 15:55 [#14]:

Цитата (Anya):

В этом случае тоже не получается.

Ну воспользуйся отладчиком.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:01
Выполнено за 0.04 сек.