MDI anwendungen



  • das mag gehen wenn ich das mdi-child gerade erstelle .. aber nicht wenn das child schon erstellt ist und ich irgendwann auf diesen button klicke

    BUTTON:

    TFrm_mdiChild *test;
    test->input->Lines->Add("test");

    lässt sich compilieren
    aber beim drücken des buttons gibts nen fehler

    ERZEUGEN DES CHILD:
    Child->input->Lines->Add("test");
    dann wird jedes neu erzeugte childt mit diesem text belegt ..
    es klappt nur nicht von dem button aus

    [ Dieser Beitrag wurde am 10.05.2003 um 19:09 Uhr von henky editiert. ]



  • Original erstellt von henky:
    **TFrm_mdiChild *test;
    test->input->Lines->Add("test");

    lässt sich compilieren
    aber beim drücken des buttons gibts nen fehler**

    Ist doch logisch, das Fenster muss erst mit new erstellt werden, bevor du auf seine Elemente zugreifen kannst.



  • Oder meintest du das hier?

    TForm *Child = MainForm->MDIChildren[0];
    Child->input->Text = "blabla";
    ...
    


  • nett gedacht 🙂

    nur gibts bei Child gar kein input .. weil du es ja als TForm declariert hast .. und nicht also mdichild

    also bei mir ging das so auch nicht ...

    ich hab dir mal einen link per email zugeschickt hoffe das du mir dadurch helfen kannst



  • Hmmm, offenbar soll der Button nicht gleichzeitig das Child erzeugen. Dann kann das ActiveMDIChind irgendein Child sein. Das wär über dynamic_cast erreichbar.

    TChild* Frm_mdiChild= dynamic_cast<Frm_mdiChild*>(ActiveMDIChild);
        if(Frm_mdiChild!= NULL)
            Frm_mdiChild->input->Text = "blabla";
    


  • input ist doch das RE? Das legst du doch in der Form ab. Wenn nicht, mußt du es mit dem Child dynamisch erzeugen.



  • YEAH

    FREU FREU FREU 🙂

    danke OMEGA

    TChild* Frm_mdiChild= dynamic_cast<Frm_mdiChild*>(ActiveMDIChild);
    if(Frm_mdiChild!= NULL)
    Frm_mdiChild->input->Text = "blabla";

    muss zwar wie folgt heissen aber danke

    TFrm_mdiChild* ....... dynamic_cast<TFrm...

    genau das habe ich gesucht danke

    weiter so junx

    c++.de ownt 🙂



  • Au sorry, das tut weh. Die Klasse muß natürlich deine Childklasse sein - oder ich laß meinen Originalcode als Beispiel. Hab's beim Drüberkopieren übersehen. Zum Glück ist die Fehlermeldung gut verständlich.

    <edit>Du wirst den Aufbau mit dem Button ja nur für die Studierphase eingerichtet haben? In der laufenden App kann jederzeit der Text des RE im ActiveMDIChild mit deinem Ausgangstext überschrieben werden. Die Codezeile würde ich gleich bei der Bildung des Childs dazusetzen. Bei der Childgenerierung kannst du alle benötigten Anweisungen erteilen.</edit>



  • so .. omega noch eine frage 🙂

    also wenn ich diesen code von dir bei meinem button[mdi-form] verwende
    funktioniert er

    wenn ich diesen "code" allerdings in eine funktion reinsetze[mdi-form] funktioniert er nicht mehr ..

    folgendes

    [mdi-form] bzw u_main.cpp

    void schreiben(String variab)
    {
    TFrm_mdiChild* Frm_mdiChild = dynamic_cast<TFrm_mdiChild*>(ActiveMDIChild);
    if(Frm_mdiChild != NULL)
    Frm_mdiChild->input->Lines->Add(variab);
    }

    void __fastcall TFrm_Main::Button2Click(TObject Sender)
    {
    TFrm_mdiChild
    Frm_mdiChild = dynamic_cast<TFrm_mdiChild*>(ActiveMDIChild);
    if(Frm_mdiChild != NULL)
    Frm_mdiChild->input->Lines->Add("test");
    }

    so beide "funktionen" sind identisch vom inhalt .. allerdings:
    der Button funktioniert ...
    die funktion "schreiben" aber nicht ...
    die funktion "schreiben" bringt nen fehler bei ActiveMDIChild

    ???

    /edit 🙂

    <edit>Du wirst den Aufbau mit dem Button ja nur für die Studierphase eingerichtet haben? In der laufenden App kann jederzeit der Text des RE im ActiveMDIChild mit deinem Ausgangstext überschrieben werden. Die Codezeile würde ich gleich bei der Bildung des Childs dazusetzen. Bei der Childgenerierung kannst du alle benötigten Anweisungen erteilen.</edit>

    das verstehe icht nicht ... sagen wirs so .. DIESER button ist nur zum testen
    aber später einmal wird schon irgendwo ein button sein mitdem ich etwas in das aktive re feld schreiben will ...

    geht das etwa einfacher ?

    [ Dieser Beitrag wurde am 11.05.2003 um 15:14 Uhr von henky editiert. ]

    [ Dieser Beitrag wurde am 11.05.2003 um 15:21 Uhr von henky editiert. ]



  • Hi,
    entweder schreiben als Member von TFrm_Main deklarieren oder TFrm_Main->ActiveMDIChild schreiben!

    MFG

    Alexander Sulfrian



  • Noch zum <edit>: Es kommt auf die Aufgabe deiner App und den Aufbau an.

    Lohnt sich zB. eine Buttonleiste für die App, wenn Childs geöffnet sind? Eine ganze Leiste für vielleicht 3 Button? @Jansen hat dir das sehr nützliche MainForm->MDIChildren[0] gezeigt. Die Leiste der MainForm soll vielleicht nur angezeigt werden, wenn keine Children geöffnet sind?

    Du kannst im Child völlig problemlos auf den Code der Main zugreifen, wie @Alexander Sulfrian es dir gesagt hat. Also können "Universal"Button auch problemlos in der Leiste des Childs liegen.

    Bei deinem Beispiel würde es sich sogar empfehlen, Button und Anweisung beim Child zu verwalten. Denn du willst ja in genau das Child reinschreiben, das momentan aktiv ist. - Die Komsequenz sagt: Dann kann das Child auch Button und Code verwalten...


Anmelden zum Antworten