Combobox - loeschen der strings

18/12/2007 - 13:51 von baeman | Report spam
Hi,

habe ein Problem mit einer Combobox - moechte Strings waerend der
Laufzeit hinzufuegen/entfernen.

Was eigentlich auch klappt, zumindest 2-3 mal. dann werden nicht mehr
alle strings geloescht. Sondern
ab da bleibt immer 1 String bestehen!

Folgend der Code der Funktion. Welche ueber den Eventhandler
OnSelChange aufgerufen wird.

Das der Aufruf von "numOfStrings = (((CComboBox*)
GetDlgItem(IDC_cb_propMethod))->GetCount());" 2x passiert dient nur
zum debuggen.




[code]

void CSimSetup_View::changeInputParameters(int sel)
{
CString str;
int i;
int numOfStrings = ((CComboBox*) GetDlgItem(IDC_cb_propMethod))-

GetCount();


for(i = 0; i < numOfStrings; i++)
{
((CComboBox*) GetDlgItem(IDC_cb_propMethod))->DeleteString(i);

}
UpdateData(false);
numOfStrings = (((CComboBox*) GetDlgItem(IDC_cb_propMethod))-

GetCount());



switch (sel)
{
case 0:

((CComboBox*) GetDlgItem(IDC_cb_propMethod))->AddString("1");
((CComboBox*) GetDlgItem(IDC_cb_propMethod))->AddString("2");
((CComboBox*) GetDlgItem(IDC_cb_propMethod))->SetCurSel(3);
break;

case 1:
((CComboBox*) GetDlgItem(IDC_cb_propMethod))->AddString("abc");
((CComboBox*) GetDlgItem(IDC_cb_propMethod))->SetCurSel(0);
break;

case 2:
((CComboBox*) GetDlgItem(IDC_cb_propMethod))->AddString("xyz");
((CComboBox*) GetDlgItem(IDC_cb_propMethod))->SetCurSel(0);
break;
default: break;
}
}


[/code]


Vielen Dank fuer Eure Hilfe!
 

Lesen sie die antworten

#1 René König
18/12/2007 - 14:04 | Warnen spam
Hallo!

baeman schrieb:
Was eigentlich auch klappt, zumindest 2-3 mal. dann werden nicht mehr
alle strings geloescht. Sondern
ab da bleibt immer 1 String bestehen!



Das ist auch richtig so, da Du mit einem aufsteigenden Index (i)
arbeitest. Wenn Du beispielsweise 3 Items in Deiner ComboBox hast und Du
mit dem Zàhlen bei 2 angekommen bist, gibt es diesen Index schon gar
nicht mehr. Es ist dann nur noch ein Item vorhanden (die zwei Items an 0
und 1 sind bereits gelöscht), der einzige gültige Index ist jetzt die 0.

Zur Abhilfe gibt es mehrere Möglichkeiten. Zum Einen könntest Du mit
einem absteigenden Index arbeiten, also von numOfStrings - 1 bis
einschließlich 0. Oder aber Du làsst die Schleife so, wie sie jetzt ist,
und rufst DeleteString immer mit 0 auf. Noch einfacher wird es aber,
wenn Du auf Schleife und DeleteString komplett verzichtest und einfach
die Methode ResetContent() aufrufst.

Gruß,
René

Ähnliche fragen