Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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)



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

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

Наверх





Память: 0.47 MB
Время: 0.006 c
14-9624
Blackweber
2002-02-08 01:16
2002.04.04
Вы все про пиво, да про пиво. А помочь не хотите?


14-9600
Сергей Иванов
2002-02-21 10:56
2002.04.04
Эльбрус Бабаяна и Pentium Пентковского


1-9444
Serd_hhc
2002-03-25 10:41
2002.04.04
MP3 и Как?


1-9481
heruvim4ik
2002-03-09 14:32
2002.04.04
простейшая прога весит 300 кб...


3-9362
Ghostlady
2002-03-11 16:44
2002.04.04
Падает база данных без видимых причин





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский