Mehrere Listviews und 1 Popupmenu
-
Hi,
ich habe mehrere Listviews denen ich 1 Popupmenu zuweisen will.
Bei dem OnClick Event im Popupmenu habe ich versucht den Sender zu casten.
Ich bekomme nur MenuItem oder den Namen vom PopupIch will aber das Listview ermitteln was den Event ausgelöst hat. Kann mir bitte jemand verraten wie ich es richtig mache? Der Weg den Sender zu casten scheint auf jeden Fall falsch zu sein!
Danke!
-
TListView *lv = dynamic_cast<TListView*>(PopupMenu1->PopupComponent); if (lv) Caption = lv->Name;
-
Ahja, aber wieso geht das nur so?
Auf jeden Fall: Danke schön!
-
Was meinst du mit "nur so"?
Entscheidend ist das PopupComponent, das zeigt auf die auslösende Komponente.
Dorthin gelangt man bei Bedarf aber auch auf anderem Weg, z.B. vom MenuItem aus durch Hochhangeln in der Objekthierarchie.
-
Jansen schrieb:
Was meinst du mit "nur so"?
Entscheidend ist das PopupComponent, das zeigt auf die auslösende Komponente.
Dorthin gelangt man bei Bedarf aber auch auf anderem Weg, z.B. vom MenuItem aus durch Hochhangeln in der Objekthierarchie.Also da ich das offensichtlich falsch gemacht habe, dachte ich mir das eigentlich auch mit dem hochhangeln.
Kannst du mir einen Tipp geben wie das mit dem hochhangeln funktioniert? Würde das gern probieren damit ich das für die Zukunft weiss
-
So zum Beispiel:
void __fastcall TForm1::MenuItem1Click(TObject *Sender) { TMenuItem *mi = dynamic_cast<TMenuItem*>(Sender); if (mi) { TPopupMenu *pm = dynamic_cast<TPopupMenu*>(mi->GetParentComponent()); if (pm) { TListView *lv = dynamic_cast<TListView*>(pm->PopupComponent); if (lv) Caption = lv->Name; } } }
-
Danke!
Wie ich sehe war ich davor doch auf dem richtigen Weg, nur das "GetParentComponent" hat gefehlt, bzw. das "PopupComponent". Wobei ich zumindest letzteres dann schon rausgefunden hätte.