dynamische Steuerelemente zerstören



  • Hallo mit einander,

    ich habe eine Anwendung mit dynamischen Steuerelementen erstellt.
    Die Spezifikation der Steuerelementen sind in den entsprechenden Konfigurationsdatein gespeichert.

    Das Programm startet mit einer Default-Datei. Wenn ich übers Menü (Öffnen) eine neue Konfigurationsdatei lade, werden zwar die neuen Steuerelementen geladen, aber die alten werden nicht zerstört, obwohl ich das in der vorgesehnen Methode vor der Erzeugen der Steuerelementen implementiert habe.

    Soll man in der 'OnOpenFile'-Methode noch was reinschreiben?

    Danke im Voraus
    Kathy83



  • poste mal deinen code... so ist es schwer den fehler zu interpretieren...


  • Mod

    Nortmalerweise wird in einer SDI Applikation vorher DeleteContents aufgerufen!



  • void CMeinView::SteuerelementeLaden()
    {
        CMeinApplDoc * pDoc = dynamic_cast<CMeinApplDoc *>(GetDocument());
        if(pDoc == NULL) return;
    
        // alte Steuerelemente zerstören
        pDoc->DestroySteuerelemente();
    
      //Steuerelemente erzeugen
      ..........
    }
    

    @ Martin Richter: kannst Du s bitte genauer beschreiben, wo und wie ich DeleteContents aufrufen kann.

    Muss nicht die OnOpenFile_Methode überschrieben werden?

    ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
    
    void OnFileOpen
    {
       ????? wie kann ich ich z.B.  CMeinView::SteuerelementeLaden() aufrufen??
    }
    

    Danke



  • denke mal:

    afx_msg void OnFileOpen(..)
    

    in der header



  • die steht schon in der Header-Datei, aber sie muss überschrieben werden ... aber wie?



  • Denke mal so:

    void CMeinView::OnFileOpen(...){
    
    /// TODO
    
      CView::OnFileOpen(...);
    }
    

  • Mod

    Wenn ein neues Dokument geöffnet wird, dann wird automatisch DeleteContents aufgerufen, damit man den Inhalt des alten Dokumentes zerstören kann. Gleiches gilt am Ende der Lebensdauer eines MDI/SDI Dokumentes!

    Du musst es nicht aufrufen. Du musst die Funktion überschreiben.

    IMHO ist es Blödsinn die Funktion OnFileOpen für so etwas zu missbrauchen.



  • @ BorisDieKlinge: es geht leider so nicht funktioniert.

    Martin Richter schrieb:

    Du musst es nicht aufrufen. Du musst die Funktion überschreiben.

    Wie kann ich dann die Funktion überschreiben?
    Das frage ich auch die ganze Zeit 🙂

    Martin Richter schrieb:

    IMHO ist es Blödsinn die Funktion OnFileOpen für so etwas zu missbrauchen.

    Wie macht man das sonst, wenn man eine neue Konfigurationsdatei lädt?

    Vielen Dank



  • @Kathy83

    Arbeitest Du mit dem kompletten Doc/View Framework? Soll heissen, Serialize( CArchive &ar ) etc?

    Wenn ja, dann ist die OnOpenDocument(LPCTSTR lpszPathName) durchaus die richtige Stelle. Auch wenn Martin anderer Meinung ist. Ich bin bisher sehr gut damit gefahren (das sind schon ein paar Jahre 😉 ).

    Man darf dan u.U. nur die Basisimplementierung nicht aufrufen, und speziell bei COleDocument-Derivaten muss man aufpassen.

    Gruss, Gio

    - Oh Mann, immer die Rechtschreibfehler, da muss man nach dreimaliger Vorschau noch mal editieren 😮



  • @Gio: Danke, Du hast mich auf den richtigen Weg gebracht. Es funktioniert jetzt.
    Danke auch an BorisDieKlinge und Martin Richter 🙂

    Gruß, Kathy83


Anmelden zum Antworten