Liste darstellen in einem Dialogfeld ...
-
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");
-
....
[ 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