Totte Karlsson
Totte Karlsson

Reputation: 1341

Two TListBoxes using the same TPopup menu?

I have one TListBox with 'movie' items and another one with 'snapshots'. I want to use one popup menu for both Listboxes. However, in the onClick event for a popups menuitem, how do I resolve which list box was used?

I tried this:

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

  if(lb == mMoviesLB)
  {
 ...

where DeleteAll1 is a TMenuItem in the Popup menu. The lb is always NULL so there is something missing here..

Upvotes: 0

Views: 57

Answers (1)

Remy Lebeau
Remy Lebeau

Reputation: 597941

The TPopupMenu::PopupComponent property tells you which UI control displayed the popup menu, eg:

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

If the TPopupMenu is displayed automatically (ie: right-clicking on a control when TPopupMenu::AutoPopup is true), the PopupComponent is populated automatically. However, if you call TPopupMenu::Popup() yourself, the PopupComponent will be NULL unless you assign it beforehand, eg:

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

Upvotes: 3

Related Questions