Liste darstellen in einem Dialogfeld ...



  • Alleine die Suche hier im MFC-Forum bringt mir schon 'ig' Links auf Einträge von Postern, die das gleiche Problem haben/hatten:

    z.B. zu Listenfeldelementen

    und viele andere



  • Hast du für deinen zweiten Dialog schon eine Klasse erstellt???



  • Ja hab ich. Hat er automatisch gemacht als den eingefügt habe.

    Ich hab nun so eine "Tabelle". In diese kann ich auch etwas reinschreiben. Allerdings hab ich nun das Problem das ich leider meine Liste da nicht reinbekomme. Ich hab eine extra header und cpp datei. Die heisst "Liste" und da ist halt die Liste drin.
    Die Liste ist eine Klasse namens "liste" diese enthält eine Struct mit den Daten. Diese struct heisst "Listenelement". So: Problm: Ich kann keinen Zeiger auf ein Listenelement in meiner neuen Dialogklasse erstellen. Frage: WARUM ? Ich kann eine Liste erstellen aber kein Listenelement. Damit kann ich natürlich auch keine Daten aus der liste holen weil meine Ausgabe, in etwa so aussieht:

    Listenelement *temp;
        temp = Anfang;
    
        if(temp == Ende)
            printf("Leere Liste ! \n");
        else
    
        while(true)
        {
    

    Problemlösung ?

    [ Dieser Beitrag wurde am 05.02.2003 um 14:05 Uhr von KrustyDerClown editiert. ]



  • @KrustyDerClown

    Hast du schon was von "friend-Klassen" gehört.

    ...Eine Klasse kann eine andere als friend deklarieren. Damit gibt die deklarierende Klasse der anderen (dem friend) Erlaubnis, ihre private: und protected:-Felder zu benutzen. public:-Felder sind nicht beschränkt. Jede Anweisung, auch die in friend-Klassen, kann auf public:-Felder zugreifen.

    [ Dieser Beitrag wurde am 05.02.2003 um 14:24 Uhr von badenser editiert. ]



  • Ich vestehe zwar dein Problem nicht ganz aber ich versuche es mal.

    Im ersten Dialog hast du ein ListCtrl mit daten.

    Dies hat die Klasse CListCtrl irgenwas;

    Im 2ten Dialog willst du die gleiche Liste auch haben.

    2 Moglichkeiten und haben bei nicht mit MFC zu tun sondern mit CPP.

    Übergabe der Klasseninstanz an den 2ten Dialog. Oder übergabe der Klasseninstanz (this) des ersten Dialogs an den 2ten und dann über den ertsen an die Liste.

    Und für beide Lösungen gibt es etwas in der FAQ.



  • jo schonmal was von gehört. Allerdings nur bei der operatorüberladung.

    Welche klasse soll ich dann "friend" machen ? Die Liste ? die Struktur ?



  • @ Unix-Tom.

    Bissel anders.

    1. Dialog. 3 Eingabe Felder. Wenn man dann auf einen Button klickt soll diese Daten in eine Liste gespeichert werden. Diese Liste ist in einer extra Header und cpp datei implementiert. Die klasse heisst "Liste". Und diese klasse hat noch eine Struktur in ihr die "Listenelement" heisst.

    2. Dialog. Diese Tabelle. (IDC_LIST1). Wenn mann nur im 1.Dialog auf "Auswahl" klickt soll die Liste praktisch komplett durchlaufen werden und die Inhalte in diese Tabelle geschrieben werden.

    Mein Problem: im 2.Dialog lässt er mich einen Zeiger vom typ "Listenelement" erstellen. Somit kann ich auch nicht Daten aus der Liste auslesen und in die Tabelle schreiben.



  • Wo hast du den Zeiger das erste Mal initialisiert?



  • gar nicht.

    Liste.h

    #ifndef LISTE_H
    #define LISTE_H LISTE_H
    #include <string.h>
    
     class Liste
    
    {
    private:
     struct Listenelement {
            char *name;
            char *matrikelnummer;
            int semester;
            Listenelement *Naechstes;
            Listenelement(char * newname,char * newmatrikelnummer, int & newsemester) : semester(newsemester), Naechstes(NULL)
            {
                        char * name = new char[strlen(newname)+1];
                        strcpy(name,newname);
                        char * matrikelnummer = new char[strlen(newmatrikelnummer)+1];
                        strcpy(matrikelnummer,newmatrikelnummer);
    
            }
        };
    
        Listenelement *Ende, *Anfang;
        int Anzahl;
    
    public:
        Liste();
    
        void Add(char *newname,char *newmatrikelnummer,int newsemester);
        void Aus(void);
    };
    #endif
    

    Liste.cpp

    Liste::Liste():Ende(NULL), Anfang(NULL), Anzahl(0) {}
    
    void Liste::Add(char *newname,char *newmatrikelnummer,int newsemester) {
    
        Listenelement *temp = new Listenelement(newname,newmatrikelnummer,newsemester);
        if(Anfang == NULL)
        {
            Anfang = temp;
        }
        if(Ende == NULL)
        {
            Ende = temp;
        }
        if(Anzahl == 0)
        {
            temp->Naechstes = NULL;
        }
    
        Ende->Naechstes = temp;
        Ende = temp;
        Anzahl++;
        temp->Naechstes = NULL;
    }
    

    So sieht die Liste aus.
    Und den zeiger versuch ich in im Dialog2 zu erstellen.



  • In der MFC sieht das ganze so aus:

    struct ListenElement
    {
      CString strName;
      CString strMatrikel;
      int Semester;
    };
    CList<ListenElement> MeineListe;
    

    [ Dieser Beitrag wurde am 05.02.2003 um 14:59 Uhr von RenéG editiert. ]



  • also so wie ich es habe kann ich es vergessen ?

    ohne Zeiger ?

    [ Dieser Beitrag wurde am 05.02.2003 um 15:05 Uhr von KrustyDerClown editiert. ]



  • Also ich lese zwar auch aus einer Datei in ein Struct um dies dann in der Liste auszugeben, aber irgendwie ganz anders als du.

    Ich hab dafür gar nicht soviel schreiben müssen.



  • Ich lese doch gar nicht aus einer Datei ein.



  • Was hat
    <string.h>

    in MFC verloren.

    Ich denke nicht das du ein Problem mit MFC hast sondern mit den Grundlagen von C++.

    Wenn ja da verschriebe ich dich nach C++ und sie erklären dir dort die Übergabe von Zeigern auf Klassen an andere Klassen.



  • jo verschrieb mich mal.

    wenn ihr anderen Leuten nicht helfen könnt/wollt seid ihr Mods wohl nicht zufrieden. 😉



  • wenn ihr mir wirklich helfen wollt dann sagt mir doch wie ich die Liste richtig mache ... mit CString. Der Codeteil von ReneG bringt mich nicht wirklich weiter, weil ich nicht weiss ob das schon alles ist bzw. wie da dann sachen speichern kann und wie ich die sachen wieder auslesen kann in die Tabelle.
    Für euch wird das doch kein Problem sein.

    Nochmals Danke für eure Geduld und hilfe.



  • Woher kommen die Listenelemente, die du anzeigen willst?

    Tippst du die jedesmal ein?



  • Also derzeit verschiebe ich dich noch nicht.

    Welche Liste hast du im ersten Dialog? (Steuerelement)

    Welche Liste im 2ten? (Steuerelement)

    Ich speiche solche Daten immer in einer eigenen Klasse welche als verkettete Liste aufgebaut ist.



  • ne ich hab eine Add Methode geschrieben für die Klasse Liste.

    Die sieht so aus:

    void Liste::Add(char *newname,char *newmatrikelnummer,int newsemester) {
    
        Listenelement *temp = new Listenelement(newname,newmatrikelnummer,newsemester);
        if(Anfang == NULL)
        {
            Anfang = temp;
        }
        if(Ende == NULL)
        {
            Ende = temp;
        }
        if(Anzahl == 0)
        {
            temp->Naechstes = NULL;
        }
    
        Ende->Naechstes = temp;
        Ende = temp;
        Anzahl++;
        temp->Naechstes = NULL;
    }
    

    Jedes mal wenn man auf "Speichern" klickt dann werden halt die aktuellen Werte in die Liste gespeichert.



  • [url] http://www.sct-clan.de/sctturnier/test.htm [/url]

    Das ist die Benutzeroberfläche. Damit wisst ihr nun genau wie das Ding aussieht. Rechts der Dialog ist halt praktisch der Ausgabedialog. Der wird aufgerufen durch einen Klick auf den "Auswahl" Button.

    Um die Datensätze speichern zu können will ich eine Liste haben. und GENAU fehlt mir bzw. die die ich habe ist ja mist wie ihr gemeint habt.

    DESWEGEN PLS gebt mir eine Liste die funktioniert. Die braucht auch nur eine Methode Add haben und eine Methode die die Liste im 2. Dialogfenster ausgibt.

    gruss Krusty

    p.s. das was bereits im 2.Dialogfenster steht hab ich "per Hand" reingeschrieben.
    in dieser Form.

    m_Auflistung.SetItemText(0,1,"Hallo4");
    

Anmelden zum Antworten