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!";
-
... also benutz' lieber dynamic_cast anstelle des C-Style Casts ...
Hat das einen triftigen Grund oder ist es einfach Ansichtssache ?
Würde mich wirklich interessierenGruß 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
-
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