Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];

Вниз

Sender is not! TButton   Найти похожие ветки 

 
id_privin   (2002-08-23 11:36) [0]

Очередной раз наступаю на эти грабли, и хочу наконец разобраться.

Есть MyAction : TAction. Сделана в дизайне. И в проге пишем так

MyButton := TButton.Create(...);
MyButton.Action := MyAction;

Вызываем прогу, жмем на кнопку, акция срабатывает, но !!!!! Sender"ом оказывается не кнопка, а акция.

Вопрос в чем дело, и как это лечить?


 
DiamondShark   (2002-08-23 11:49) [1]


> Вопрос в чем дело, и как это лечить?


Дело в том, что обработчик вызывает не кнопка, а акция.

Явление полезное, надо не лечить, а пользоваться.


 
id_privin   (2002-08-23 12:10) [2]

Хм, насколько я помню, если акцию присвоить в дизайне то Sendr"ом будет как раз компонент который ее вызывает, нет?


 
Игорь Шевченко   (2002-08-23 12:12) [3]

Нет. Sender - это всегда Action. Сделано, к примеру, для того, чтобы различать Actions на которые назначен общий обработчик


 
id_privin   (2002-08-23 12:19) [4]

Да, я ошибся, но если писать Button.OnClick = MyActionExecute
Sender правильный, только все преимущества которые дает Action, при этом теряются.

2Игорь Шевченко. Вам не кажеться странным такой подход, ведь Action это действие, почему разные действия могут делать одно и тоже? А вот вызвать из разных мест одно и тоже действие, вполне логично.


 
Игорь Шевченко   (2002-08-23 12:32) [5]

Какая разница, какой компонент вызвал Action.Execute, если действие всегда одно и то же ?

Мне этот подход кажется разумным и логичным, как, впрочем и остальные подходы Borland :-)))


 
Макс Черных   (2002-08-23 17:06) [6]


> Какая разница, какой компонент вызвал Action.Execute, если
> действие всегда одно и то же


Ну а если разница все таки интересна, то для этого
существует свойство TBasicAction.ActionComponent
которое и указывает на кнопку или меню или чего там
нажали.

>id_privin
Вот так оно и лечится:
TAction(Sender).ActionComponent ...

Однако, лучше пересмотреть логику работы программы, чтобы
исключить подобные проверки. А то получается смесь
концепций построения пользовательского интерфейса.


 
Игорь Шевченко   (2002-08-23 17:22) [7]

Макс Черных © (23.08.02 17:06)

Только для D6


 
Юрий Зотов   (2002-08-23 22:17) [8]

> если акцию присвоить в дизайне

Неважно когда, в run-time то же самое.


> то Sendr"ом будет как раз компонент который ее вызывает, нет?

Да, именно так. И все у Вас именно так и происходит. Обработчик вызывается КОМПОНЕНТОМ TAction (потому что TAction - это точно такой же компонент, как и все остальные, только невидимый), поэтому Sender"ом, естественно, он и является. Все по теории.




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

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

Наверх





Память: 0.46 MB
Время: 0.007 c
7-14310
kerrik
2002-06-27 00:13
2002.09.05
Как выключить компьютер под Win2000 (NT,XP)


3-13900
slav
2002-08-14 17:29
2002.09.05
формат даты в результате запроса из ib firebird


14-14263
MBo
2002-08-09 09:55
2002.09.05
Еще задачки ;)


1-14088
murza
2002-08-22 12:26
2002.09.05
Изменение ресурсов


1-14055
Schummi
2002-08-26 09:46
2002.09.05
MessageDlgEx





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский