Moin,
die Situation ist albern - und zu meinem Leidwesen kann ich das Problem aktuell nicht besser artikulieren. Mein ListView hat einfach ein Loch.
Gegeben ist ein ListView mit beispielsweise sechs Einträgen. Nun lösche ich den vorletzten Eintrag via ListView1.Items.Delete(4) raus.
Nun erwarte ich, dass der Listview den untersten Eintrag artig nach oben verschiebt, um die entstandene Lücke zu schliessen. Das tut er in meinem Fall aber nicht. Der unterste Eintrag bleibt stehen, wo er ist.
Zuerst glaubte ich an ein Update-Problem in dem Sinne, dass die neue Situation nicht gezeichnet wird. Nein. Der ListView kann mit der Lücke umgehen - und das überraschend souverän. Selektiere ich den Eintrag VOR der Lücke und gehe mit dem Cursor nach unten, springt der Fokus völlig korrekt über die Lücke und selektiert den letzten Eintrag.
Selbst eine Größenänderung des Formulars (der Listview ist mit Align = alClient ausgerichtet) übersteht die Lücke unbeschadet. Bis hin zu den Scrollbalken, die die Lücke korrekt einberechnen, wenn ich das Form entsprechend verkleinere.
Es bleibt dabei, nach dem Löschen hat er ein Loch. Und ich dachte, der sei noch gut, den könne man noch verwenden.
Anbei ein Screenshot der verschiedenen Phasen.
Vielleicht hatte ich bisher nur Glück - aber so habe ich das bisher noch nie erlebt. Kennt das jemand?
//edit:
Items.Count ist nach dem Löschen korrekt reduziert, .Invalidate/.Refresh./Paint etc. habe ich durchprobiert, .BeginUpdate und .EndUpdate ebenfalls - ohne Erfolg.
Daniel R. Wolf
mit Grüßen aus Hamburg