Zugriff auf Elemente von Child



  • Vielleicht kannst du es auch mal so versuchen.

    TMDIChild *Child = dynamic_cast<TMDIChild*>(ActiveMDIChild);
    Child->Edit1->Text = "Hallo";

    Konnte es leider nicht testen, da im Moment kein BCB



  • Wozu soll das gut sein, wenn du den eigentlichen Vorteil von dynamic_cast ignorierst?

    ... dynamic_cast ...
    if (Child)
      Child->Edit1->...
    

    Um die explizite Nennung der MainForm kommt er aber nicht herum. Schliesslich wird der Code aus einem Child heraus aufgerufen, und die verfügen üblicherweise über keine eigenen Childs, somit auch nicht über eine ActiveMDIChild.



  • Ja da hat Jansen recht, aber leider funktioniert die ungeprüfte Funktion

    ((TMDIChild*)MainForm->ActiveMDIChild)->Edit1->Text = "TEST";
    

    leider auch nicht. Übre MainForm muss man gehen, aber wie.
    Ich habe mit Folgender Funktion zumidest schon einmal das Aktive Child
    ansprechen können, und es minimieren können:

    TForm* TheForm;
    
      TheForm = MainForm->ActiveMDIChild;
    
      if (TheForm)
        TheForm->WindowState = wsMinimized;
    

    leider habe ich dies nicht so modifizieren können, das ich Elemente (Edit1)
    ansteuern kann. Ich währe also für weitere Vorschläge sehr sehr dankbar,
    denn ich bin so langsam mit meinem Latain am Ende und auch das WWW gibt irgendwie
    nicht mehr her.



  • coder-beginner schrieb:

    Ja da hat Jansen recht, aber leider funktioniert die ungeprüfte Funktion

    ((TMDIChild*)MainForm->ActiveMDIChild)->Edit1->Text = "TEST";
    

    leider auch nicht.

    "Funktioniert nicht" ist keine ausreichende Problembeschreibung.



  • Asso ja klaro, es kommt fast die gleiche Fehlermeldung wie bei der vorhergehenden
    Version:
    Fehlermeldung:
    "Im Projekt mdiapp.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: "'Zugrifsverletzung bei Adresse 004031EF in Modul 'mdiapp.exe'. Lesen von Adresse 000002F4'.
    Prozeß´wurde angehalten. Mit ......"



  • Hast du denn mal die sichere Variante mit dynamic_cast getestet?

    TMDIChild *child = dynamic_cast<TMDIChild *>(MainForm->ActiveMDIChild);
    if (child)
      child->Edit1->Text = "bla";
    

    Ggf. solltest du statt ActiveMDIChild aber auch lieber den Index der Zielform im Children-Array verwenden. Das setzt natürlich voraus, dass der Index der Form immer derselbe oder zur Laufzeit zumindest bekannt ist.
    Also MainForm->MDIChildren[1] für das zweite Child, entsprechend deines ursprünglichen Postings



  • Ich danke Dir vielmals! Der letzte Code war die Lösung,
    im Prinzip war das ja der von "maam", ganz gering verändert:
    (MainForm->ActiveMDIChild)

    DANKE



  • Ich würde sagen entscheidend verändert! 😉
    Wie gesagt, ohne das if nützt dir dynamic_cast auch nichts.



  • Jep, got sei dank bzw. Jansen sei dank 😉
    Währe super wenn Du noch einige Zeilen der Anweisung widmen würdest,
    denn ich verstehe erlichgesagt die Anweisung der ersten Zeile nicht:

    TMDIChild *child = dynamic_cast<TMDIChild *>(MainForm->ActiveMDIChild);
    

    noch mal thx
    coder-beginner



  • Zu dynamic_cast gibt's einen eigenen FAQ-Eintrag, unter "Allgemein".


Anmelden zum Antworten