Wie auf versch. MDI Childs zugreifen?



  • ich erzeuge Childs so

    TForm2* Form2;
    Form2 = new TForm2(Application);
    

    wie kann ich auf ein spezielles zugreifen?

    per Form2[index].Show() bekomm ich exception (es wurden 3 childs erstellt, index ist 1)



  • Die BCB Hilfe ist (wie so oft) dein Freund:
    MDIChildCount
    Da findest du auch ein Beispiel.
    😉



  • was hat das mit meinem Problem zu tun?
    Ich weiß wieviele Childs ich habe, ich möchte aber ein gewisses fenster zeigen!

    Eben Form2[0].Show();

    da bekomm ich Exception



  • ok, ich habs!
    MDIChildren[index]->Show();

    allerdings steht in der hilfe, die wäre ungeeignet, wenn ich bestimmte fenster referenzieren möchte, da sich der index jedes fensters ändert, nach jeder aktivierung!

    Wie kann ich mir etwas bauen, das ich für jedes fenster einen FESTEN index habe, den ich IMMER benutzen kann??



  • dazu kannst du die Eigenschaft Tag des Forms verwenden, einfach beim Erstellen des Form einen eindeutigen Wert zuweisen



  • Hallo

    leg ein eigenes dynamisches Array vom Typ TMDIForm* als Member des Hauptforms an, wo du die Adressen von neu erschaffener Fenster hinzufügst und gelöschte wieder entfernst. Dann hast du ein Array mit konstanten Index.

    Vermutlich sollte es in so einer MDI-Anwendung eh eine Art Container für Verwaltungsobjekte vorhanden sein, wo jedes Objekt ein MDI-Fenster entspricht und die konkrete Fenster-Instanz auch direkt kennt.

    bis bald
    akari



  • welche von den beiden genannten varianten ist denn die bessere?
    Mit tags?Wenn ja, müsste ich ja erst durch alle fenster itterieren, und das gewünschte mit dem tag anzeigen oder?

    mit dem array:
    @ akari, kannst du mir da vielleicht ein einfaches beispiel geben?



  • Hallo

    welche von den beiden genannten varianten ist denn die bessere?

    Linneas Variante ist schneller implementiert, meine ist komplexer aber bietet im nachhinein mehr Flexibilät und Möglichkeiten

    Mit tags?Wenn ja, müsste ich ja erst durch alle fenster itterieren, und das gewünschte mit dem tag anzeigen oder?

    Ja, dann must du iterieren.

    @ akari, kannst du mir da vielleicht ein einfaches beispiel geben?

    Nehmen wir mal an, jedes MDI-Fenster stellt eine Datei dar, mitsamt komplexeren Arbeitsdaten/statis. Dann lohnt sich, eine Klasse zum Verwalten der Grunddaten in einer extra Unit anzulegen (Minimalbeispiel)

    class Doc
    {
      AnsiString Filename;
      ...
      TMDIForm* Form;
    };
    

    Dann dekalrierst du im Mainform ein dynamisches Array davon

    // Header des MainForms
    #include <vector>
    #include "DocUnit.h"
    ...
    private :
      std::vector<Doc> docs;
    public :
    

    Nun kannst du bei jedem neuen Form dieses auch in deiner Verwalter-struktur eintragen. Desweiteren kannst du in der MDIForm-Klasse auch einen Pointer auf die zugehörige Doc-Klasse dekalrieren, um auch vom Form zurück zur Verwalterklasse zu kommen.
    Hier beitet sich die ganze Bandbreite der Möglichkeiten der OOP an.

    bis bald
    akari


Anmelden zum Antworten