Kann in meinem Dialog nichts ins Listenelement schreiben
-
Hi,
ich mach mir grad nenn Dialog in dem ich in Form einer Liste Daten ausgeben lassen möchte. Nur irgenwie check ich net ganz wie ich das mit dem Listenelement machen soll. Also ich will die Daten nicht beim Init des Dialogs reinschreiben sondern nachdem der Dialog offen ist, soll über einen Update Button die Liste gefüllt werden.
Ok, ich hab das Listenelement in den Dialog eingefügt und auch nenn Button eingebaut der das ding dann füllen soll, nur geht da nix ..... Code hab ich in 2. Post reingeschrieben .... Oder muss ich da noch irgenwie ein Update des Dialogs ausführen damit es angezeigt wird.
Schon mal danke im VOrraus
VGThomas
-
Jason_Frost schrieb:
Also ich will die Daten nicht beim Init des Dialogs reinschreiben sondern nachdem der Dialog offen ist, soll über einen Update Button die Liste gefüllt werden.
Dann mach das doch. Füge einen Butten hinzu, reagiere auf die Nachricht BN_CLICKED, und schreibe in die neue Methode den Source den du sonst in die Init schreiben würdest (nur den zum Listen füllen).
void CTestDlg::OnButton1() { CListBox *list = (CListBox*)GetDlgItem(IDC_LIST1); //Hier wird vermutlich noch eine Schleife sein die die Daten von irgendwo einliest list->AddString("was oder wie auch immer"); }
-
Ok ich habs jetzt mal so gemacht aber er schreibt nix ins Feld rein wenn ich auf den Button clicke. Hier mal der Code den ich produziert hab
void Dialog::OnLoad() { grmstruct data; CListBox *list = (CListBox*)GetDlgItem(IDC_LIST1); vector<grmstruct>::iterator it; for(it = m_data.begin(); it != m_data.end();++it){ data = *it; string temp; temp = data.latitude; list->AddString(temp.c_str()); } //UpdateAllViews(NULL); }ok hier noch der Aufruf des Dialogs
void CMfcdateiDoc::OnFileOpen() { GrmParser grmparser; Dialog dialog; grmstruct data; // Dateidialog zum Importieren: CFileDialog fileDialog(true, NULL, NULL, NULL, "grmdateien (*.grm)|*.grm|Alle Dateien (*.*)|*.*||"); // wenn der Benutzer den Dialog mit OK verlassen hat: if (IDOK == fileDialog.DoModal ()) { // zunächst alte Daten löschen DeleteContents (); try { CStdioFile file (fileDialog.GetPathName (), CFile::typeText); CString line; string s_line; double value, minVal, maxVal; while (file.ReadString (line)) { s_line = line; grmparser.Parse(s_line); } TRACE0("hallo"); // Alle Ansichten aktualisieren UpdateAllViews (NULL); // als verändert kennzeichnen SetModifiedFlag (); } catch (CFileException *e) { e->ReportError (); e->Delete (); return; } } dialog.m_data = grmparser.mv_grmdata; dialog.DoModal(); //dialog.LoadData(); }Könnte ich jetzt den Clistbox-Pointer eigentlich zurückgeben lassen und mit dem Teil dann in einer anderen Methode weiterarbeiten oder wäre das unschön
-
Schau dir mit dem Debuger mal diese drei Werte an
* Vielleicht geht er gar nicht in die Schleife
--> m_data.begin()
--> m_data.end()
* Vielleicht ist der string leer
--> temp.c_str()Wirst die Werte in eine eigene Variable speichern müßen.
CListBox *list = (CListBox*)GetDlgItem(IDC_LIST1);
Der Aufruf holt dir den Zeiger auf deine Liste. Am Ende der Methode ist der Zeiger list sowieso zerstört. Wenn du "delete list" aufrufen würdest dann kannst du nicht mehr auf die Liste zugreifen weil der Speicher freigegeben worden wäre.
Du kannst ja auch
((CListBox*)GetDlgItem(IDC_LIST1))->AddString(temp.c_str());
schreiben.
Du kannst diese Funktion jederzeit aufrufen und mußt den Zeiger nicht zurückgeben.MFG, Sigi
-
for(it = m_data.begin(); it != m_data.end();++it)soll wohl heißen
for(it = m_data.begin(); it <= m_data.end();++it) //oder nur ein < hängt von den Werten ab.TSCHAU, Sigi
-
BigSigi schrieb:
for(it = m_data.begin(); it != m_data.end();++it)soll wohl heißen
for(it = m_data.begin(); it <= m_data.end();++it) //oder nur ein < hängt von den Werten ab.TSCHAU, Sigi
ne, ich denke '!=' ist bei Iteratoren schon richtig
-
ok jetzt klappts ... ich trottel hatte im Dialog das Feld falsch eingestellt
Danke nochmal für die Hilfe