Sender auf Komponentennamen abfragen?



  • Ich würde gerne über eine Funktion den Namen jeder beliebigen Komponente erhalten wollen. Ist dies möglich oder muss ich für jeden Komponententyp wie TButton und TSpeedButton eine seperate Funktion schaffen und entsprechend wie hier auskommentiert casten?

    //---------------------------------------------------------------------------
    AnsiString __fastcall TMainForm::GetName(TObject *Sender)
    {
        //return ((TButton *)Sender)->Name;
        //return ((TSpeedButton *)Sender)->Name;
        return ????????;
    }
    //---------------------------------------------------------------------------
    void __fastcall TMainForm::Button1Click(TObject *Sender)
    {
        Caption = GetName(Sender);
    }
    //---------------------------------------------------------------------------
    void __fastcall TMainForm::SpeedButton1Click(TObject *Sender)
    {
        Caption = GetName(Sender);
    }
    //---------------------------------------------------------------------------
    


  • Hallo,

    Die Eigenschaft Name taucht ab TComponent auf (siehe Hierarchie in der Hilfe). Es reicht also zu dahin zu casten.

    AnsiString __fastcall TMainForm::GetName(TObject *Sender)
    {
        TComponent* comp = dynamic_cast<TComponent*>(Sender);
        if( comp ) return comp->Name;
        return "";
    }
    


  • Hallo

    Nein es reicht wenn du alles auf TComponent castest.

    /Edit : zu spät

    bis bald
    akari



  • Super! Großes Dankeschön an euch beide! 👍
    Wieder was gelernt 😃



  • Da Name eine (public) Eigenschaft der Basisklasse TComponent ist, reicht es, wenn du das Objekt daraufhin 'castest':

    AnsiString __fastcall TMainForm::GetName(TObject *Sender)
    {
        return (static_cast<TComponent*>(Sender))->Name;
    }
    

    Wenn du nicht weißt, daß es sich um eine Komponente handelt, kannst du auch dynamic_cast<> einsetzen und auf 0 überprüfen.

    Edit: man bin ich langsam, aber eben standen bei mir noch keine Antworten...


Anmelden zum Antworten