Liste darstellen in einem Dialogfeld ...
-
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. ]
-
void CDownloadDlg::addfiletolist()
CDownloadDlg ?? Was ist das ?
-
Dies ist ein Soource von mir aus einem meiner Programme. Ich will damit nur Zeigen wie es geht. Also nicht copy/Paste sondern verstehen wie es geht.
-
Also ich schreib nun auch mal meinen Senf dazu.
ich würde die auf der zweiten Seite genannt Lösung von ReneG bevorzugen.
Einfach so eine Struct oder class erfassen:struct ListElement { CString m_strName; CString m_strMaNr; bool m_bGeschlecht; }
Und das einfach in die Header deines View kopieren. Am besten vor der Klassendefinitin des Views. Dann in einem public-Bereich in deinem View:
CList<ListElement,ListElement> myList;
So und nun wenn und auf Speichern drückst:
ListElement newElement; //dann die Dten der Editfelder in in new speichern ... //Element hinten anhaengen mylist.AddTail(newElement); //Wenn du den Dialog zu erstenmal startest oder das Objekt initialisierst CDeinDialog dlg(&m_pList);
So und nun im Dialog:
//In der Header #include "deineView.h" CList* m_pList; //--------------------------------------------- //Im Konstruktor von deinem Dialog m_pList = pList; //Der Konstruktor muss dann natürlich auch so aussehen CDeinDialog(CList *pList);
So und nun schau dir noch die Methoden CList::GetTail, CList::GetHead, CList::GetNext, CList::GetHeadPosition an.
Am besten hier:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmfc98/html/_mfc_clist.asp
So und nun mal selber denken.
Ciao
Stalin
[ Dieser Beitrag wurde am 06.02.2003 um 09:21 Uhr von Stalin editiert. ]
-
Mal eine Grundlegende Frage.
Kannst Du das problem nicht auch über CObject lösen.
Erstelle einfach eine Klasse mit den Daten die Du brauchst. Erstelle dann eine ObjectListe in der Art
CTypedPtrList<CObList, CDeinKlasse*> m_DeineKlasseList;
Dann hast Du genug Funktionen um die Liste zu verwalten.
Roland
-
sei net böse aber lies vieleicht doch erst mal ein Buch. VisualC++ in 21 tagen giebet als pdf im Internet z.B. als ebook. Oder auch viele andere deutsche tuts. denn das problem bei dir liegt wie ich finde dabei:
Zitat von Unix-Tom:
Dies ist ein Soource von mir aus einem meiner Programme. Ich will damit nur Zeigen wie es geht. Also nicht copy/Paste sondern verstehen wie es geht.
Ich glaube dir fehlen ein paar grundliegende dinge. Wie gesagt weis ja net wie gut du bist aber das hier klingt echt net gut. Es haben dir jetzt viele leuts echt guten Code gegeben aber du scheinst einfach nix damit anfangen zu können.
Vieleicht solltest du doch nochmal ein Buch lesen.Nimm das net als eine beleidigung sondern ein Tipp
[ Dieser Beitrag wurde am 06.02.2003 um 16:29 Uhr von xyz44 editiert. ]
-
Aber da wäre es doch einfacher gleich eine CPtrList zu verwenden. Die akzeptiert nämlich Daten des Typs void*. Denn für die gewünschte Funktionalität
muss man nicht unbedingt von CObject ableiten usw.Ciao
Stalin
-
Stalin zustimmt:)