弹出菜单单击源自哪个组件

Ral*_*ach 17 delphi contextmenu

有一个弹出菜单附加到表单上的几个组件(按钮,但也有TCharts之类的东西),我想知道哪个组件被右键单击以首先启动弹出菜单.

click方法的Sender参数只指向TMenuItem,它是弹出菜单(或父级菜单项)的父级.

我如何获得原始组件?

Sim*_*aWB 35

你的意思是PopupMenu1.PopupComponent吗?


Sch*_*Ltd 10

您可以在PopupMenu的TMenuItem的click事件中获取调用者组件

Caller := ((Sender as TMenuItem).GetParentMenu as TPopupMenu).PopupComponent;
Run Code Online (Sandbox Code Playgroud)

PopupMenu的示例,它分配给多个列表框并解决导出到文件功能:

procedure TForm1.mniExportFileClick(Sender: TObject);
var Caller: TObject;
begin  
  if SaveTextFileDialog1.Execute then
  begin
    Caller := ((Sender as TMenuItem).GetParentMenu as TPopupMenu).PopupComponent;
    (Caller as TListBox).Items.
      SaveToFile(SaveTextFileDialog1.FileName,
        StandardEncodingFromName(
          SaveTextFileDialog1.Encodings[SaveTextFileDialog1.EncodingIndex]));
  end;
end; 
Run Code Online (Sandbox Code Playgroud)