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.


Log in to reply