Ändern eines Elements mit LB_SETITEMDATA (ListBox)
-
Hallo,
ich habe schon alle möglichen Versionen ausprobiert und alles durchgoogelt, und trotzdem finde ich nicht die Lösung. Was ich machen möchte ist ganz einfach den Wert (Text) eines Elementes in der Listbox ändern. Eigentlich ganz einfach... das ist mein Ansatz, der nichts bewirkt:
int iResult = SendMessage(hParentList, LB_SETITEMDATA, iSelIndex, (LPARAM)cEditedName); if (iResult == LB_ERR) MessageBox(hWndDlgNew, "Fucking error!", "fail!", NULL);Die Werte in
iSelIndexundcEditedNamesind ok, die gebe ich mir jedes Mal vorher aus. Das Problem ist, dass iResult auch keinen Fehler zurückgibt! Mit hParentList spreche ich das richtige Handle an, weil ich im nächsten Block noch was anderes mit dem Handle mach (ADDSTRING), und das klappt.
Das habe ich auch schon ausprobiert:SendDlgItemMessage(hWndDlgNew, IDC_LIST, LB_SETITEMDATA, (WPARAM)iSelIndex, (LPARAM)cEditedName);Danke für alle Vorschläge.
-
Wenn ich mich recht erinnere, kannst Du den Text eines Elementes in der Listbox nicht ändern, Du musst das alte Element löschen und das neue einfügen.
Mit SETITEMDATA kannst Du lediglich einen 32-bit - Wert mit dem via wparam adressierten Element assoziieren.
Siehe auch:
http://msdn.microsoft.com/en-us/library/bb775146(v=VS.85).aspx
-
Belli hat recht.
Verwende doch besser ein ListView das ist weitaus leistungsfähiger.Alternative: Du arbeitest ohne LBS_HASSTRINGS und verwaltest die Stringsselber.
-
Danke für die Tipps Jungs. Ich glaube ich hätte noch nach 10 Jahren nach 'ner Lösung gesucht

Martin Richter schrieb:
Alternative: Du arbeitest ohne LBS_HASSTRINGS und verwaltest die Stringsselber.
Kannst du mir vielleicht einen Anhaltspunkt geben?
Edit: hat sich erledigt. Hab mit delete+insert umgesetzt.