Liste darstellen in einem Dialogfeld ...



  • 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");
    


  • ....

    [ Dieser Beitrag wurde am 05.02.2003 um 20:36 Uhr von badenser editiert. ]



  • Wie ich schonmal geschrieben habe:

    Ich schreibe meine Daten in eine Struktur:

    //im Header
    
     struct IrgenwasInputDaten
       {
          CString TextSpalte1;
          CString TextSpalte2;
          CString TextSpalte3;
       };
    
       IrgendwasInputDaten InputData[256];
    
    //in Klasse
    //und fülle sie mit dem, was ich auslese
    ...
    while ( file.ReadString(line) )
    {
    ...
    
    InputData[iCount].TextSpalte1 = CString Irgendwas1;
    InputData[iCount].TextSpalte2 = CString Irgendwas2;
    InputData[iCount].TextSpalte3 = CString Irgendwas3;
    
    iCount++;
    ...
    }
    
    //rufe Funktion auf
    
    ...
    FillList(iCount);
    ...
    
    //und schreibe sie durch eine for-Schleife in die Liste:
    void myClass::FillList(int iFillCount)
    {
       m_list.DeleteAllItems();
    
       for ( int i = 0; i < iFillCount; i++)
       {
          m_list.InsertItem( i, "text");
          m_list.SetItemText( i, 0, (InputData[i].TextSpalte1 ) );
          m_list.SetItemText( i, 1, (InputData[i].TextSpalte2 ) );
          m_list.SetItemText( i, 2, (InputData[i].TextSpalte3 ) );
       }
    
    }
    

    Ich hoffe es kann Dir vielleicht ein bisschen weiterhelfen.

    Gruss



  • Vielen Dank. Werde das gleich ausprobieren.

    eine extra header/cpp hast du dafür nicht angelegt würde ich sagen ... in welche Header hast du sie den gestopft bzw. in welche CPP ?



  • Zum Thema CList: http://www.mut.de/media/buecher/VCPLUS6/data/kap13.htm
    Ist das nicht das selbe Problem?

    CU



  • Die Struct habe ich in mein Main.h geschrieben und das andere in die Main.cpp

    Hatte vorher acuh jede Menge Probleme mit der CList und habe es nochmal neu aufgesetzt. Dabei kam das heraus und funktioniert einwandfrei.

    Gruss



  • Problem:

    Main ? Ich hab nur eine MainFrm.

    ne eingentliche main gibts ja net bei SDI.

    also ich hab mal in meine TestDoc.h die Struktur reingetan. und auch gleich das feld "IrgendwasInputDaten InputData[256];".

    Dann in meine TestView.cpp "InputData[0].TextSpalte1 = "BUHHHHHHHHHH";"

    und dann in meine Dialog2.cpp "m_Auflistung.SetItemText(3,2,InputData[0].TextSpalte1);"

    Und genau da sagt er mir dann das er InputData[0] nicht kennt. Obwohl ich die TestDoc.h includiert habe. 😞

    Woran liegts ?



  • Also warum so kompliziert, erstelle in dem Dialog indem die eingabe passiert für jedes eingabe feld eine Membervariable vom Typ String und wenn der dialog beendet wird einfach UpdateData(true) und dann nen Handel auf die DialogKlasse indem die Eingabe passiert und die membervariablen ins ListCtrl eintragen.

    Falls du net weis wie ich habe schon mal auf einen ähnlichen tread geantwortet. Must blos die RecordKlasse durch deine DialogKlasse ersetzen der rest ist das gleiche eigentlich

    Dialog in dem alle Datensätze angezeigt werden!

    [ Dieser Beitrag wurde am 05.02.2003 um 21:49 Uhr von xyz44 editiert. ]



  • Das löst das problem nicht.

    1. Der 1.Dialog wird nie beendet.

    und 2. wenn ich im 2. Dialogfeld die ausgabe machen will dann weiss er von den anderen varibalen nix mehr. 😞



  • Hier man eine einfache Liste in eine Klasse

    Header

    class CFileliste  
    {
    public:
    
        CFileliste *m_pNext;
        CFileliste(CFileliste *pNext);
        virtual ~CFileliste();
    
        CString m_dirid;
        CString m_id;
        CString m_filename;
    };
    

    Die cpp

    #include "Fileliste.h"
    
    CFileliste::CFileliste(CFileliste *pNext)
    {
        m_pNext=pNext;
        m_dirid = _T("");
        m_id = _T("");
        m_filename = _T("");
    }
    
    CFileliste::~CFileliste()
    {
    
    }
    

    in einer Hader wo es verwendet wird.

    #include "Fileliste.h"
    CFileliste *m_filelistezeiger;
    

    in der cpp

    // Destructor
    
        CFileliste *temp;
        while(m_filelistezeiger!=NULL)
        {
            temp=m_filelistezeiger->m_pNext;
            delete m_filelistezeiger;
            m_filelistezeiger=temp;
        }
    // Detructor ende
    
    //eine funktion zum hinzufügen 
    void CDownloadDlg::addfiletolist()
    {
        CFileliste *pdatenzeiger;
        pdatenzeiger=new CFileliste(m_filelistezeiger);
        m_filelistezeiger=pdatenzeiger;
    }
    
    // in einer anderen funktion der Zugriff
    
    CFileliste *filelistezeiger;
    for(filelistezeiger=m_filelistezeiger;filelistezeiger!=NULL;filelistezeiger=filelistezeiger->m_pNext)
    {
    // filelistezeiger->m_filename;
    }
    

    Das ist jetzt mal eine einfache Version da man immer nur von Beginn an Durchsuchen kann und sollte aber für deine Zwecke vorerst genügen.

    [ Dieser Beitrag wurde am 05.02.2003 um 22:50 Uhr von Unix-Tom editiert. ]


Anmelden zum Antworten