2016-08-10 2 views
0

Ich habe eine TListBox mit "Film" -Elementen und eine weitere mit "Schnappschüssen". Ich möchte ein Popup-Menü für beide Listboxen verwenden. Wie kann ich jedoch im onClick-Ereignis für ein Popup-Menüelement auflösen, welches Listenfeld verwendet wurde?Zwei TListBoxes mit demselben TPopup-Menü?

Ich versuchte dies:

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

    if(lb == mMoviesLB) 
    { 
... 

wo DeleteAll1 ein TMenuItem im Popup-Menü. Die lb ist immer NULL, so gibt es hier etwas fehlt ..

+0

In Ihrem Fall 'Sender' nicht das Listenfeld ist, so dass die' dynamic_cast (Sender) 'Rückkehr "NULL". Es ist wahrscheinlich die Speisekarte. Fügen Sie einfach etwas wie 'ShowMessage (Sender-> ClassName());' zum Anfang Ihrer Funktion hinzu, um zu sehen, was es ist. –

+0

Guter Tipp, Sender-> ClassName() .. Ich habe festgestellt, dass der Sender tatsächlich die TMenuItem-Komponente ist .. Frage ist, wie man sich selbst zurück zur ListBox-Komponente arbeitet? –

Antwort

3

Die TPopupMenu::PopupComponent Eigenschaft erfahren Sie steuern, welche UI das Popup-Menü angezeigt, zB:

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

Wenn die TPopupMenu wird automatisch angezeigt (zB: rechts- Klicken Sie auf ein Steuerelement, wenn TPopupMenu::AutoPopup wahr ist), die PopupComponent wird automatisch aufgefüllt. Wenn Sie jedoch TPopupMenu::Popup() selbst nennen, wird die PopupComponent NULL sein, wenn Sie es vorher zuweisen, zB:

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