Allgemein: Programmiertipps - dynamic_cast vs. standard cast



  • hi!

    in meinem programm gibt es viele TEdits, die das selbe popup menü aufrufen. wie bekomme ich denn heraus, von welchem Tedit das popup menu aufgerufen wurde???

    thx, mitch

    [ Dieser Beitrag wurde am 02.02.2003 um 17:06 Uhr von Jansen editiert. ]



  • if(PopupMenu1->PopupComponent == Edit1)
      ShowMessage("Grüsse von Edit1");
    else if(PopupMenu1->PopupComponent == Edit2)
      ShowMessage("Grüsse von Edit2");
    


  • danke für die hilfe!

    aber, wie kann ich es machen, dass automatisch ein text dem edit zugeordnet wird?

    also so nach dem motto:

    PopupMenu1->PopupComponent->Text = "hier steht der text";

    (mir ist klar, dass das so nicht funktionieren kann 😉

    aber wie?

    thx, mitch



  • habs schon!

    TEdit *xyz;
    xyz = (TEdit *) PopupMenu1->PopupComponent;
    xyz->Text = "bla, bla!";
    

    ja,ja
    die gute alte suchfunktion 😉



  • Es heisst ja "**C++**Builder", also benutz' lieber dynamic_cast anstelle des C-Style Casts (auch wenn das sogar in der BCB-Hilfe "falsch" gemacht wird).

    TEdit *xyz = dynamic_cast<TEdit*>(PopupMenu1->PopupComponent);
    if (xyz)
      xyz->Text = "bla, bla!";
    


  • @Jansen,

    ... also benutz' lieber dynamic_cast anstelle des C-Style Casts ...

    Hat das einen triftigen Grund oder ist es einfach Ansichtssache ?
    Würde mich wirklich interessieren

    Gruß Mikel



  • @mikel

    man beachte das Fettgedruckte:
    --- Jansen's Code ---
    TEdit *xyz = dynamic_cast<TEdit*>(PopupMenu1->PopupComponent);
    if (xyz)
    xyz->Text = "bla, bla!";
    --- cut ---
    Castest du zur Laufzeit mit RTTI, hast du die Chance zu checken, ob der Vorgang erfolgreich war. Machst du es mit C-Style Casting, bekommst du mit Sicherheit immer irgendeine Speicheradresse geliefert und der Compiler wird sich zur Compilierzeit nicht beschweren...

    Was ist nun besser ? ...Sauber programmierte goto-Anwesungen würden ihre Aufgabe wahrscheinlich auch tun. Gibt es einen "triftigen Grund", sie nicht zu verwenden, oder ist es "Ansichtssache" ? Natürlich ist es Ansichtssache - genauso wie z.B. Verwendung von Variablen mit den Namen k,m,l,i,s,g o.Ä. (möglichst global) auch.

    ...es sei denn, man legt Wert auf Programmierstil. images/smiles/icon_smile.gif



  • @Serge,

    ich hab den Code tatsächlich nur überflogen und das if() übersehen.
    Aber generell lohnt es sich wohl das immer zu machen.
    Deine Erklärung war gut, Danke.

    Gruß Mikel


Anmelden zum Antworten