CListBox macht Ärger
-
Ich habe in einem Dialog eine CListBox. Folgende Fälle/Fehler treten auf:
1. Sie ist leer und man klickt rein: OK.
2. Sie enthält einen/mehrere Eintrage.
→2a. Ich klicke einen Eintrag an: OK.
→2b. Ich klicke auf freie Fläche: Fehler!
→2c. Ich klicke auf freie Fläche nachdem ich zuvor Eintrag angeklickt habe: OK.Die Fehlermeldung kommt vom Debugger und sagt mir der Fehler hat was mit der Expression "nLength>=0" zu tun, ich schätze mal das bezieht sich auf die ListBox.
-
Kann es sein, dass der Fehler ein ASSERT ist?
Wie sieht die Funktion aus, die du aufrufst, wenn auf die Liste geklickt wird?
-
void CDlgConnection::OnLbnSelchangeIpList() { CString tmpIP; mListIP.GetText(mListIP.GetCurSel(), tmpIP); SetDlgItemText(IDC_IP_ADDRESSE, tmpIP); }
-
Welchen Wert hat mListIP.GetCurSel() im Fehlerfall?
-
der fehler entsteht wenn du das letzte element in der liste anklicken willst richtig??!!
der fehler ist hier
mListIP.GetText(mListIP.GetCurSel(), tmpIP);richtig wäre
mListIP.GetText(mListIP.GetCurSel()[b]-1[/b], tmpIP);mListIP.GetCurSel() liefert dir wenn du auf das erste element klickst eine 1 zurück wir wissen aber das eine Liste eine Array ist und diese immer mit 0 beginn

folglich springt er mit mListIP.GetCurSel() beim letzten element hinter die Array und das veruhrsacht den fehler

-
Was ist, wenn nix ausgewählt ist, GetCurSel somit LB_ERR bzw. -1 zurück gibt ?
[edit] ...mal davon abgesehen, das GetCurSel den richtigen Index zurück gibt und nicht 1 beim ersten Element... [/edit]
-
LowFly schrieb:
mListIP.GetCurSel() liefert dir wenn du auf das erste element klickst eine 1 zurück wir wissen aber das eine Liste eine Array ist und diese immer mit 0 beginn

Echt jetzt? Das ist mir völlig neu.

Ich arbeite dummerweise extrem selten mit Listboxen und kanns grade nicht testen, aber: Bei CComboBox und CListCtrl hat die erste Zeile den Index 0.
-
@LowFly:
Sorry, aber was du erzählst ist falsch.@estartu&isabeau:
Richtig, ich habe versäumt, den Fehlerfall zu behandeln, danke!
-
stimmt f... das war bei
GetItemCount bzw. GetCount so