我如何看到谁在Delphi中触发了一个动作?

前端之家收集整理的这篇文章主要介绍了我如何看到谁在Delphi中触发了一个动作?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当动作甚至触发时,“发件人”始终是动作本身.通常这是最有用的,但是有可能找出谁触发了这个动作的一次事件呢?

假设你有一个表单与以下:

> 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@H_502_14@ 
 

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.@H_502_14@ 
 

目前唯一的解决方案是不使用按钮的动作属性,而是为每个按钮设置一个事件处理程序,并从那里调用了actDoStuffExecute(),但这种方式首先违反了使用动作的全部目的.

我不想为每个单独的控件都有一个专门的动作.上面的例子是我面临的问题的简化版本.我有一个带有可变数量菜单项(文件名)的菜单,每个菜单项基本上都要做同样的事情,除了加载另一个文件.对每个菜单项进行操作会有点傻.

解决方法

尝试使用ActionComponent属性
ShowMessage( (Sender as TAction).ActionComponent.Name );@H_502_14@ 
 

当我分别点击第一个和第二个按钮时,我会得到“Button1”和“Button2”.

猜你在找的Delphi相关文章