TButtonItem 的 OnClick returns TCategoryButtons 的发送者

TButtonItem's OnClick returns Sender of TCategoryButtons

我目前正在 Delphi 10 Seattle 试用 TSplitView 组件。结构如下所示:

对于第二个 TButtonCategory,我尝试使用以下代码以编程方式创建项目:

procedure TMainF.DynamicMenuButtonClick(Sender: TObject);
begin
  if sender is TButtonItem then //false
    ShowMessage('Sender is TButtonItem'); 

  if sender is TCategoryButtons then //true
    ShowMessage('Sender is TCategoryButtons'); 
end;

procedure TMainF.FormCreate(Sender: TObject);
var
  i: integer;
begin
  for i:=0 to 10 do begin
    catMenuItems.Categories[1].Items[i] := TButtonItem.Create(catMenuItems.Categories[1].Items);
    catMenuItems.Categories[1].Items[i].Caption := 'Something';
    catMenuItems.Categories[1].Items[i].OnClick := DynamicMenuButtonClick;
  end;
end;

在 "DynamicMenuButtonClick" 过程中,我想获取有关单击哪个按钮的信息,问题是类型为 TCategoryButtons 的发件人没有告诉我。现在我想知道我是否只是错过了什么,或者这是否确实是不可能的。

The problem is that the sender which is of type TCategoryButtons doesn't tell me that

是的,确实如此。在事件处理程序中使用 TCategoryButtonsSelectedItem 属性。

procedure TForm1.DynamicMenuButtonClick(Sender: TObject);
var
    categoryButtons: TCategoryButtons;
begin
    categoryButtons := (Sender as TCategoryButtons);
    Memo1.Lines.Add(categoryButtons.SelectedItem.Caption);
end;

TCategoryButtons 提供一个事件 OnButtonClicked 给你 TButtonItem。也许这在这里很有用。

TCatButtonEvent = procedure(Sender: TObject; const Button: TButtonItem) of object;