Problem mit dynamic_cast
-
Hallo zusammen,
vielleicht kann mit jemand auf die Sprünge helfen. Ich versuche an alle Edits einer Form zu kommen mit dem folgenden Code:
for(int i=0; i < Form_Neu->ComponentCount; i++) { TEdit* edit = dynamic_cast<TEdit*>(Form_Neu->Components[i]); if (edit){ edit->Text= "test"+ IntToStr(i); Memo1->Lines->Add(edit->Name); } }
Die Namen der Edits werden ausgelesen und in das Memo geschrieben.
Was jetzt nicht geht, ist die Edits zu beeinflussen, weder Text noch Farbe etc.
Danke schon mal.
-
Dein Code sieht in Ordnung aus. Am dynamic_cast liegt es mit Sicherheit nicht. Evtl. wird deine Form nicht aktualisiert? Versuch mal ProcessMessages
-
Auf der Form_Main funktioniert der Code. Auf der Form_Neu allerdings nicht.
Ich öffne die Form mit:void __fastcall TForm_Main::NeuClick(TObject *Sender) { TForm_Mediadaten *Fo= new TForm_Mediadaten(Application); Fo->ShowModal(); delete Fo; return; }
Kann es damit zusammenhängen?
-
Hi,
der Code passt im Prinzip.Wann führst du den die Schleife durch?
Und wer ruft sie auf?Wenn du die Schleife in "TForm_Mediadaten" laufen lässt, würde ich
for(int i=0; i < Form_Neu->ComponentCount; i++) { TEdit* edit = dynamic_cast<TEdit*>(Form_Neu->Components[i]); if (edit){ edit->Text= "test"+ IntToStr(i); Memo1->Lines->Add(edit->Name); } }
durch
for(int i=0; i < this->ComponentCount; i++) { TEdit* edit = dynamic_cast<TEdit*>(this->Components[i]); if (edit){ edit->Text= "test"+ IntToStr(i); Memo1->Lines->Add(edit->Name); } }
ersetzen.
-
Erst mal vielen Dank an Braunstein und AlphaUniform.
Der this-Zeiger war hier die Lösung, jetzt geht es auch in der mit "new" erstellten Form.