Problem mit CListCtrl

sisela

Erfahrenes Mitglied
Hallo Leute,
irgendwie ist hier der Wurm drin.

Also, ich habe einen Dialog, in dem ein Listenfeld angezeigt werden soll. Es gibt zwei Spalten. Ich möchte gerne bevor der Dialog angezeigt wird, den Inhalt des Listenfeldes füllen. Dazu habe ich die Methode OnInitDialog überschrieben. In dieser möchte ich nun alle Werte in das ListCtrl einfügen und wenn man später DoModal() aufruft, soll der Inhalt erscheinen.

So folgenden Code habe ich:
Code:
BOOL CPreviewDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	m_listctrl.SetExtendedStyle( LVS_EX_GRIDLINES );
	m_list.InsertColumn( 0, "1. Spalte", LVCFMT_LEFT, 240);
	m_listAutoRef.InsertColumn( 1,  "2. Spalte", LVCFMT_LEFT, 240 );

	m_list.InsertItem(1,"Hase");
	m_list.SetItemText(1, 0, "Maus");
	m_list.SetItemText(1, 1, "Hund");

return TRUE;

So aufgerufen wird einfach so:
Code:
CPreviewDlg myDlg;
myDlg.DoModal();

So folgendes Problem: Bei der Funktion SetItemText gibt es immer einen Fehler und ich weiß nicht warum. Ich habe auch schon mit den Indizes rumgespielt aber es ändert sich nichts. Was mache ich falsch? Wenn ich keine SubItems eintrage erscheint nicht einmal das erste Item. :confused:
 
Zuletzt bearbeitet:
Warum hast du 2 unterschiedliche Listen-Variablen? Damit hast du in zwei Listen nur eine Spalte.
Code:
m_list.InsertColumn( 0, "1. Spalte", LVCFMT_LEFT, 240);
m_listAutoRef.InsertColumn( 1,  "2. Spalte", LVCFMT_LEFT, 240 );

Diese beiden Zeilen setzen jeweils den Text der gleichen Spalte ("Hase" wird durch "Maus" ersetzt).
Code:
m_list.InsertItem(1,"Hase");
m_list.SetItemText(1, 0, "Maus");
Außerdem ist es besser (sicherer), den Code so zu schreiben:
Code:
int iIndex = m_list.InsertItem(1,"Hase");
m_list.SetItemText(iIndex, 1, "Maus");
 
Sorry das war ein Schreibfehler und heißt richtig:

Code:
BOOL CPreviewDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	m_list.SetExtendedStyle( LVS_EX_GRIDLINES );
	m_list.InsertColumn( 0, "1. Spalte", LVCFMT_LEFT, 240);
	m_list.InsertColumn( 1,  "2. Spalte", LVCFMT_LEFT, 240 );

	m_list.InsertItem(1,"Hase");
	m_list.SetItemText(1, 1, "Maus");
return TRUE;

Mit dem Hasen und der Maus hast du recht. Inzwischen wird auch alles angezeigt. Danke also nochmal. Manchmal ist es nicht gut, wenn man zulange auf eine Stelle schaut.
 
Zurück