Форум: "Основная";
Текущий архив: 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