Prüfen ob Methode für Typ des ActiveMIDChild überladen wurde
-
Hallo zusammen,
ich habe eine Methode überladen:
AnsiString PrintGraphForm(TGraphForm* ActiveGraph); AnsiString PrintGraphForm(TGraphCompareForm* ActiveGraph); AnsiString PrintGraphForm(TGraphBrowser* ActiveGraph);alle drei sind spezialisierungen von TForm.
ActiveMDIChild kann aber auch eine andere TForm sein, für die ich die Methode nicht überladen habe.
Derzeit prüfe ich zur Laufzeit ob ich die Methode aufrufen kann oder nicht wie folgt:void __fastcall TMainForm::PrintImageExecute(TObject *Sender) { AnsiString Meldung="Bitte zunächst Grafikfenster auswählen."; TGraphCompareForm* ActiveCompGraph; TGraphForm* ActiveGraph; TGraphBrowser* ActiveGraphBrowser; if ((ActiveGraph =dynamic_cast<TGraphForm*> (ActiveMDIChild)) != 0) Meldung = PrintGraphForm(ActiveGraph); if ((ActiveCompGraph =dynamic_cast<TGraphCompareForm*>(ActiveMDIChild)) != 0) Meldung = PrintGraphForm(ActiveCompGraph); if ((ActiveGraphBrowser=dynamic_cast<TGraphBrowser*> (ActiveMDIChild)) != 0) Meldung = PrintGraphForm(ActiveGraphBrowser); StatusWindow->RichEdit1->Lines->Add(Meldung); }Das muss doch eleganter gehe, ohne eine Reihen von If Statements, oder?
Viele Grüße
Robert
-
Hallo
Eventuell kannst du ja von von den KLassen von ActiveGraph, ActiveCompGraph und ActiveGraphBrowser eine gemeinsame Basisklasse erstellen, die alle benötigten Elemente als Interface bereitstellt. Dann brauchst du an dieser Stelle nur einen cast auf die Basisklasse.
bis bald
akari