加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 06:10:07 所属栏目:大数据 来源:网络整理
导读:当动作甚至触发时,“发件人”始终是动作本身.通常这是最有用的,但是有可能找出谁触发了这个动作的一次事件呢? 例 假设你有一个表单与以下: 2个按钮,称为Button1和Button2 1 TAction称为ActDoStuff 同样的操作分配给两个按钮.是否可以显示我点击了哪个按钮
当动作甚至触发时,“发件人”始终是动作本身.通常这是最有用的,但是有可能找出谁触发了这个动作的一次事件呢?

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

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

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

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

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读