我如何看到谁在Delphi中触发了一个动作?
发布时间:2020-12-15 06:10:07 所属栏目:大数据 来源:网络整理
导读:当动作甚至触发时,“发件人”始终是动作本身.通常这是最有用的,但是有可能找出谁触发了这个动作的一次事件呢? 例 假设你有一个表单与以下: 2个按钮,称为Button1和Button2 1 TAction称为ActDoStuff 同样的操作分配给两个按钮.是否可以显示我点击了哪个按钮
当动作甚至触发时,“发件人”始终是动作本身.通常这是最有用的,但是有可能找出谁触发了这个动作的一次事件呢?
例 假设你有一个表单与以下: > 2个按钮,称为Button1和Button2 同样的操作分配给两个按钮.是否可以显示我点击了哪个按钮? 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. 目前唯一的解决方案是不使用按钮的动作属性,而是为每个按钮设置一个事件处理程序,并从那里调用了actDoStuffExecute(),但这种方式首先违反了使用动作的全部目的. 我不想为每个单独的控件都有一个专门的动作.上面的例子是我面临的问题的简化版本.我有一个带有可变数量菜单项(文件名)的菜单,每个菜单项基本上都要做同样的事情,除了加载另一个文件.对每个菜单项进行操作会有点傻. 解决方法
尝试使用ActionComponent属性:
ShowMessage( (Sender as TAction).ActionComponent.Name ); 当我分别点击第一个和第二个按钮时,我会得到“Button1”和“Button2”. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |