Liste füllen vor dem Aufruf des Dialogformular
-
Hallo Leute,
ich habe ein kleines oder großes?? Problem. Trotz intensiver Suche habe ich keine passende Lösung gefunden. Aus programmtechnischen Gründen muß ich eine Liste in einem Dialogformular vor dem Aufruf des Formulars füllen.
void CListeView::OnOk() { CNameDlg NameDlg; NameDlg.FuelleListe(); NameDlg.DoModal(); } void CNameDlg::FuelleListe() { int items; items = m_liste.GetItemCount(); m_liste.InsertItem(items, "Gordon"); m_liste.SetItemText(items, 1, "Shumway"); }
Aber während der Laufzeit kracht es in dem Moment in der
Zeile "items = m_liste.GetItemCount();".
Es liegt nicht an der Definition von m_liste. Das Programm läuft einwandfrei, wenn ich die Funktion im Dialog aufrufe.Hat einer eine Idee???
Vielen Dank vorab.
-
DU kannst nicht eine Liste in einem Steuerelement füllen welches noch nicht existiert.
Du kannst die Liste in der OnInitDialog füllen. Dort besteht der Dialog bereits.
-
Danke für die Antwort.
Dann muss ich das Prob anders anpacken. Eine Initialisierung im Dialog ist zu spät!
Jetzt wird eine Liste in der View-Klasse erzeugt. Eine gleichartige Liste wird in meinem Dialog beim Aufruf erzeugt aber ohne Daten. Jetz möchte ich mittels Pointer auf die Daten in der Viewklasse zugreifen um lange Ladezeiten zu vermeiden. Die Originalliste ist nämlich sehr groß.
Nun habe ich schon versucht "ListeView.h" im Dialog zu includieren um mittels einer Variablen zugreifen zu können. Doch dann meckert der Compiler.
Wäre nett von euch, wenn ihr das Prob lösen könnt. Vielen Dank vorab.
void CListeView::OnInitialUpdate() { CFormView::OnInitialUpdate(); GetParentFrame()->RecalcLayout(); ResizeParentToFit(); m_tmplist.SetExtendedStyle ( LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); m_tmplist.InsertColumn( 0, "Name 1", LVCFMT_LEFT, 50); m_tmplist.InsertColumn( 1, "Name 2", LVCFMT_LEFT, 50); m_tmplist.InsertItem(0, "Gordon"); m_tmplist.SetItemText(0, 1, "Shumway"); }
-
BItte was?
Was heißt eine Initialisierung im Dialog ist zu spät. Anders geht es nicht. Du kannst er Daten in das ListCtrl einfügen wenn es besteht. In OnInitDilaog besteht der Dialog zwar schon aber er wird noch nicht angezeigt. Dh dort ist es möglich die Liste zu füllen.
Selbst wenn du auf Daten des Views zugreifst bleibt dir nichts anderes übrig als die Liste dort zu füllen.
Du kannst dir dann auch eine Zeiger auf deine Liste in der View holen und in einer Schleife die Liste im Dialog füllen. Das wieder spricht aber dem DOC/View. Eine Liste hat in der View nur bei der Anzeige was zu suchen. Die Daten sollen in der DOC stehen. Musst dir dort eben eine Struktur oder ähnliches schreiben.Somit kann jede View, auch wenn es ein Dialog ist diese Liste von der DOC holen und Anzeigen.
Also nicht weiter falsch an das Problem rangehen sondern gleich richtig implementieren.