ListBox unsortierte Ausgabe

nammder

Mitglied
Tach zusammen,

hab ein Problem mit einer CListBox. :(
Beim Aufruf der Listbox werden die Einträge aus einer txt-Datei ausgelesen und in die Liste geschrieben. Leider werden beim Ausgeben in der Liste die Einträge alphabetisch sortiert, und das soll er bitte nicht machen.

Kann mir da jemand helfen.
Gruß nammder
 
Moin moin,

bist der erste der die Listbox sortiert hat aber nicht so haben will:) Bei denen die hier bereits gerfragt haben, war das Problem genau umgekehrt...
Bisl Code wär nett schlecht. Wie werden daten in Listbox geschrieben und wie aussortiert? Wird irgendwo die SortItems gerufen?

Gruss Michael
 
Na ja,
einer muss ja mal der erste sein ;)
Ne "SortItems" rufe ich meines Wissens nicht auf.

Also gelesen werden die Daten aus ner INI-Datei über ne Schleife bis alle betreffenen Einträge gelesen werden. Jeder Eintrag hat in der Quelldatei eine Index Nummer die hoch gezählt wird bis alle durch sind
Code:
for(int iZaehler = 0;iZaehler<iIniAnzahlRechner;iZaehler++)
	{
		sIniZaehlerRechner.Format(_T("%i"), iZaehler);
		sAktRechnerArt = inifile.GetValue("RechnerArt", sIniZaehlerRechner);
		m_lstRechnerwahl.AddString(sAktRechnerArt);
	}

In der ListBox kann dann ein Eintrag ausgewählt werden. Der Eintrag in der Liste gibt dann seinen Index zurück.

Code:
	nIndex = m_lstRechnerwahl.GetCurSel(); // holt die aktuelle Indexnummer

	iAuswahlIndex = nIndex; //Index des Eintrag wird übergeben

anhand der zurück gegebenen Indexnummer, werden dann weitere Daten aus der Datenquelldatei ausgelesen. Da durch die sortierung im Listenfeld der ursprüngliche Index nicht mehr mit dem Index aus dem Listenfeld übereinstimmt werden die falschen Daten verarbeitet.

Hoffe ich hab jetzt nicht zu viel Querbeet erklärt... :rolleyes:

Danke Gruß nammder
 
Falls nicht schon in deiner Datei sortiert wird :) Dumme Fehler passieren immer...
Schau mal nach, ob in den Eigenschaften deiner Listbox... das Flag(LBS_SORT) für sortieren gesetzt ist... Einfach mal mit GetStyle() überprüfen...

Schau mal in die MSDN's da steht:

Remarks
If the list box was not created with the LBS_SORT style, the string is added to the end of the list. Otherwise, the string is inserted into the list, and the list is sorted. If the list box was created with the LBS_SORT style but not the LBS_HASSTRINGS style, the framework sorts the list by one or more calls to the CompareItem member function.

Use InsertString to insert a string into a specific location within the list box.

Gruss Michael
 
Schon jetzt einmal vielen Dank,
aber ich glaub ich brauch Urlaub und stehe gerade total aufm Schlauch...


an welcher Stelle muss ich den Modus ändern?
Erst in der Funktion in der die Sortierung erfolgt bzw nicht erfolgen soll?

Asche auf mein Haupt für meine Fragerei...

Gruß Stefan
 
Moin!
Hab lang nicht mehr Online gehen könne, daher erst jetzt meine Antwort.

Hab mal versucht den Code zu implemtieren, aber so wie ich das versucht hab, läufts nicht. Wahrscheinlich habe ich mal wieder in meiner Jugendlichen Unwissenheit, was völlig falsch verstanden und entsprechend falsch gemacht. :rolleyes:

Hier mal der Code, damit man auch weiß, wo von ich rede:
Code:
BOOL CAuswahl::OnInitDialog()
{
	CDialog::OnInitDialog();
	
	
	// Hinzufügen des Menübefehls "Info..." zum Systemmenü.

	// IDM_ABOUTBOX muss sich im Bereich der Systembefehle befinden.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{	
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Symbol für dieses Dialogfeld festlegen. Wird automatisch erledigt
	//  wenn das Hauptfenster der Anwendung kein Dialogfeld ist
//	SetIcon(m_hIcon, TRUE);			// Großes Symbol verwenden
//	SetIcon(m_hIcon, FALSE);		// Kleines Symbol verwenden
	
	m_lstRechnerwahl.ModifyStyle(LBS_SORT,0);
	//variable zum ermitteln der aktuellen Sortierweise
	unsigned long ermittelterStil;
	ermittelterStil = m_lstRechnerwahl.GetStyle();
	
	befuelleAuswahlDialog();//liest die Quelldatei und befüllt die Rechnerliste

	return TRUE;  // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten
}

Wäre dankbar, wenn ich trotz wahrscheinlicher Kinderfehler, noch Hilfe erhalte. :(
Danke jetzt schonmal.
Gruß
 
Ich denke, es sollte
Code:
m_lstRechnerwahl.ModifyStyle(0, LBS_SORT);
heißen. Die Fensterstile im ersten Parameter werden entfernt, die im 2. Parameter werden hinzugefügt.
 
Zurück