两个 TListBoxes 使用相同的 TPopup 菜单?

Two TListBoxes using the same TPopup menu?

我有一个包含 'movie' 个项目的 TListBox,另一个包含 'snapshots' 个项目。我想为两个列表框使用一个弹出菜单。但是,在弹出菜单项的 onClick 事件中,如何确定使用了哪个列表框?

我试过这个:

void __fastcall TMainForm::DeleteAll1Click(TObject *Sender)
{
  TListBox* lb = dynamic_cast<TListBox*>(Sender);

  if(lb == mMoviesLB)
  {
 ...

其中 DeleteAll1 是弹出菜单中的一个 TMenuItem。 lb 始终为 NULL,因此此处缺少某些内容..

TPopupMenu::PopupComponent 属性 告诉您哪个 UI 控件显示了弹出菜单,例如:

void __fastcall TMainForm::DeleteAll1Click(TObject *Sender)
{
    TListBox* lb = dynamic_cast<TListBox*>(PopupMenu1->PopupComponent);
    ...
}

如果 TPopupMenu 自动显示(即:当 TPopupMenu::AutoPopup 为真时右键单击控件),PopupComponent 会自动填充。但是,如果您自己调用 TPopupMenu::Popup(),除非您事先分配它,否则 PopupComponent 将是 NULL,例如:

PopupMenu1->PopupComponent = ListBox1;
PopupMenu1->Popup(X, Y);