Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.04;
Скачать: CL | DM;

Вниз

Как грамотно организовать проверку условия?   Найти похожие ветки 

 
MaXie ©   (2002-03-25 09:50) [0]

Есть панель RadioGroup1, на которой расположены три зависимых переключателя RadioButton1..3. С последним переключателем RadioButton3 связано поле ввода Edit1. Если RadioButton3.Chacked = True, поле ввода Edit1 активно. Иначе - Edit1.Enable := False.
Теперь вопрос: если мы кликаем на RadioButton1, то в событии OnClick должны указать метод или процедуру, который(-ая) сделает неактивным поле ввода Edit1. В свою очередь, в событии OnClick для переключателя RadioButton2 мы также обязаны указать ту же самую процедуру по "деактивации" поля Edit1. А если переключателей сотня-другая? То в каждой указывать Edit1.Enable := False?
Знаю, что задача тривиальная, но все же хотелось бы получить совет, как сделать все это проще и грамотнее, так ", чтобы огород не городить"?


 
gek   (2002-03-25 09:59) [1]

Edit1.Enable := RadioGroup1.ItemIndex = 1;// нужная цифра


 
MBo ©   (2002-03-25 10:04) [2]

RadioButton -ы должны быть Item-ами RadioGroup
OnClick тогда один, и в нем
Edit1.Enable := RadioGroup1.ItemIndex=2;


 
MaXie ©   (2002-03-25 11:43) [3]

Моя ошибка - не правильно сформулировал вопрос!
Как быть если RadioButton-ы расположены на панели GroupBox? ... или же, следуя ответам на поставленный вопрос, когда RadioButton-ы не являются Item-ами панели RadioGroup?

P.S. Не являются Item-ами в силу известных причин: невозможностью форматирования, расположения в произвольном месте и др.


 
Alx2 ©   (2002-03-25 11:47) [4]

Можно попробовать ActionList и в OnUpdate проверять значения нужных RadioButtonов и выставлять активность других контролов.


 
MaXie ©   (2002-03-25 11:52) [5]

> Alex2
... значит все таки в событии OnClick каждого RadioButton указывать одну и ту же процедуру?
Или, если это не затруднит, чуть по-подробней, как это можно реализовать.


 
Виктор Щербаков ©   (2002-03-25 11:54) [6]

А что мешает указать один обработчик для всех RadioButton-ов.
А в нем проверять, например, свойство Name компонента, для которого этот обработчик был вызван, и в зависимости от его значения устанавливать св-во TEdit.


 
Alx2 ©   (2002-03-25 12:07) [7]

В черновую вышло вот что:
В ActionList добавляем новый Action1, связываем его с RadioButton1 и для Action1 о указываем метод OnExecute:
procedure TForm1.Action1Execute(Sender: TObject);
begin
Edit1.Enabled := RadioButton1.Checked;
end;

А для ActionList такой же OnUpdate:
procedure TForm1.ActionList1Update(Action: TBasicAction;
var Handled: Boolean);
begin
Edit1.Enabled := RadioButton1.Checked;
end;


 
MaXie ©   (2002-03-25 12:35) [8]

> Виктор Щербаков.
Можно чуть по-подробней. Не совсем ясна суть Вашего предложения.
> Alex2
Не работает! :((( Такой подход обеспечивает реакцию только при нажатии на переключатель RadioButton1. Все же остальные в этом случае остаются бездейственными, т.е. нам необходимо, чтобы клик по RadioButton1 делал активным Edit1, а клик на любой другой делал его, соответственно, неактивным.
Выходит так, что клик на RadioButton1 меняет свойство Enabled элемента Edit1 и на этом все заканчивается. Клики на любые другие переключатели оставляют Edit1 в прежнем, доступном (активном) состоянии. :((( Может я что ни того сделал?


 
Виктор Щербаков ©   (2002-03-25 12:40) [9]

MaXie © (25.03.02 12:35)
Один обработчик для всех RadioButton-ов:
procedure TForm1.RadioButton1Click(Sender: TObject);
begin
if (Sender as TControl).Name = "RadioButton1" then
Edit1.Enabled := true else Edit1.Enabled := false;
end;


 
Alx2 ©   (2002-03-25 12:43) [10]

>MaXie © (25.03.02 12:35)
>Можно чуть по-подробней.
>Не совсем ясна суть Вашего предложения.
Делаем OnClick для RadioButton1 с
кодом Edit1.Enabled := RadioButton1.Checked;
Для всех остальных onClick делаем равным RadioButton1Click.

>Не работает! :((( Такой подход обеспечивает ...
У меня работает.
Делал так:
Кидаю на форму ActionList1. Двойной щелчок - открывается редактор Actionов. Добавляю новый Action1. Делаю ему событие OnExecute (см выше). В свойстве Action у RadioButton1 ставлю Action1. Для ActionList1 делаю событие OnUpdate (см. выше)


 
MaXie ©   (2002-03-25 12:57) [11]

>Alex2
Ну ты ПРОФи!
Вместо того, чтобы указать Action1 в свойстве Action компонента RadioButton1, указал его в событии OnClick - мой баг! Все работает на "ура"! Приношу свои извинения за дискредитацию!


 
Alx2 ©   (2002-03-25 13:04) [12]

>MaXie © (25.03.02 12:57
Но я бы делал общий обработчик. А Action, обычно, - для синхронизации всего интерфейса вцелом. А то "из пушки по воробьям"... :))


 
Fay ©   (2002-03-25 13:58) [13]

2Alx2
Присоединяюсь 8)



Страницы: 1 вся ветка

Текущий архив: 2002.04.04;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.008 c
3-9421
VladimirTU
2002-03-13 14:43
2002.04.04
Как в ActiveX написанный в Delphi передать коннект


1-9547
snoup
2002-03-23 18:13
2002.04.04
Как написать прогу которая бы искала указаный файл на винте???


14-9625
olookin
2002-02-21 18:09
2002.04.04
Весьма странное поведение программы


3-9359
Turalyon
2002-03-11 12:08
2002.04.04
Триггеры и генераторы в IB6


3-9414
Draculenok
2002-03-13 12:11
2002.04.04
Создание отчета по нескольким линям мемо( чуть не хватает.....)