Когда действие даже срабатывает, «отправитель» всегда является самим действием.Обычно это наиболее полезно, но возможно ли как-то выяснить, кто вызвал событие onexecute действия?
Пример
Допустим, у вас есть форма со следующим:
- 2 кнопки, которые называются
Button1
и Button2
- 1 TAction вызывается
actDoStuff
Обе кнопки назначены одинаковому действию.Можно ли показать, какую кнопку я нажал?
Example.dfm
object Form1: TForm1
object Button1: TButton
Action = actDoStuff
end
object Button2: TButton
Action = actDoStuff
Left = 100
end
object actDoStuff: TAction
Caption = 'Do Stuff'
OnExecute = actDoStuffExecute
end
end
Example.pas
unit Example;
interface
uses Windows, Classes, Forms, Dialogs, Controls, ActnList, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
actDoStuff: TAction;
procedure actDoStuffExecute(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.actDoStuffExecute(Sender: TObject);
begin
ShowMessage('Button X was clicked');
end;
end.
Единственное решение, которое я вижу на данный момент, состоит в том, чтобы не использовать свойство action для кнопок, но иметь обработчик событий для каждой кнопки и вызывать оттуда actDoStuffExecute (), но этот вид бросает вызов всей цели использования действий в первомplace.
Я не хочу иметь отдельное действие для каждого отдельного элемента управления.Приведенный выше пример является упрощенной версией проблемы, с которой я сталкиваюсь.У меня есть меню с переменным количеством пунктов меню (имен файлов), и каждый пункт меню в основном должен делать то же самое, за исключением загрузки другого файла.Иметь действия для каждого пункта меню было бы немного глупо.