Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.04;
Скачать: [xml.tar.bz2];




Вниз

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


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)




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.04;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.021 c
4-9687            Vaddya                2002-01-29 23:19  2002.04.04  
Создание GroupBox


14-9601           Nataliya              2002-02-18 10:26  2002.04.04  
сохранение пользовательского интерфейса


1-9514            jenbond               2002-03-23 08:54  2002.04.04  
Помоги


3-9394            SashaG                2002-03-12 08:59  2002.04.04  
Пытаюсь св-ву Filter TTable сделать так:


7-9658            drunya                2002-01-09 14:42  2002.04.04  
Как определить номер который набираешь на телефоне