(TObject *Sender) den Name?



  • Hi. Kann man vom Sender den Namen abfragen, ohne die Komponente dahinter zu kennen die gesendet wurde? Ich möchte gern bevor ich caste

    TBEdit *Edit = static_cast <TBEdit *>(Sender);

    gern wissen wie der Name vom Sender ist, also quasi was später in Edit->Name steht.



  • Hallo

    Für die Eigenschaft Name reicht es ja, wenn du auf TComponent castest.

    static_cast<TComponent*>(Sender)->Name
    

    bis bald
    akari



  • Logisch, danke schön! 😉



  • Würde den dynamic_cast vorziehen:

    TComponent* Component = dynamic_cast<TComponent*>( Sender );
    if( Component )
    {
       AnsiString Name = Component->Name;
    }
    

    Der static_cast geht in die Hose, wenn der Sender mal kein TComponent ist (ich weiss allerdings nicht, ob das Framework sowas macht, oder ob der Sender per Definition ein TComponent sein muss... obwohl... dann hätte man auch sofort TComponent* nehmen können)



  • DocShoe schrieb:

    Würde den dynamic_cast vorziehen:

    TComponent* Component = dynamic_cast<TComponent*>( Sender );
    if( Component )
    {
       AnsiString Name = Component->Name;
    }
    

    Noch kürzer:

    TComponent* Component = &dynamic_cast <TComponent&> (*Sender);
    


  • audacia schrieb:

    DocShoe schrieb:

    Würde den dynamic_cast vorziehen:

    TComponent* Component = dynamic_cast<TComponent*>( Sender );
    if( Component )
    {
       AnsiString Name = Component->Name;
    }
    

    Noch kürzer:

    TComponent* Component = &dynamic_cast <TComponent&> (*Sender);
    

    Tjo, aber dann musst du bad_cast fangen, also doch nicht kürzer.



  • In der Regel /erwarte/ ich, daß Sender eine Komponente ist (schließlich habe ich das Event selbst gesetzt), also sollte nichts passieren. Wenn tatsächlich mal bad_cast fliegt, fängt es die VCL, und es geht nichts kaputt - aber ich weiß dann (z.B. per automatisiertem Exception-Report, -> JclDebug), daß ich an der Stelle einen Bug habe.

    Es ist an dieser Stelle einfach die sichere Variante eines static_cast<>. Das scheint mir angebrachter als den Cast explizit zu überprüfen und den Handler zu verlassen - das ist eindeutig eine Situation, die eigentlich nicht auftauchen sollte. Wenn das passiert, stimmt in deinem Programm etwas nicht, und wenn du einfach so abbrichst, kaschierst du das nur.


Anmelden zum Antworten