![]() |
TListView - Eintrag löschen hinterlässt "Loch"
Liste der Anhänge anzeigen (Anzahl: 1)
Moin,
die Situation ist albern - und zu meinem Leidwesen kann ich das Problem aktuell nicht besser artikulieren. Mein ListView hat einfach ein Loch. :oops: 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. :stupid: Anbei ein Screenshot der verschiedenen Phasen. Anhang 43651 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. |
AW: TListView - Eintrag löschen hinterlässt "Loch"
Hallo Daniel,
Ich gehe auf Grund der Optik von FMX aus. Oder ist das VCL? :P Hast du vergessen zu erwähnen. :zwinker: |
AW: TListView - Eintrag löschen hinterlässt "Loch"
Die Items sind mehrzeilig, wenn ich das richtig sehe. Zeichnest du die selbst? Wenn ja, nimm den Code mal raus.
|
AW: TListView - Eintrag löschen hinterlässt "Loch"
Pure VCL, nichts selbstgezeichnet.
Das sind die Listview-Tiles. Den Code dafür habe ich aus Deinen Tutorials, Michael. ;-) |
AW: TListView - Eintrag löschen hinterlässt "Loch"
Wie verhält er sich im Reportstil?
|
AW: TListView - Eintrag löschen hinterlässt "Loch"
In solchen Fällen baue ich persönlich die GUI grundsätzlich immer neu auf (sprich über Clear() und Add()).
Allerdings weiß ich nicht wie performant die TListView an dieser Stelle ist - Deinem Screenshot nach zu urteilen sollte das zumindest für deinen Anwendungsfall problemlos funktionieren :P |
AW: TListView - Eintrag löschen hinterlässt "Loch"
@Michael:
Vermutlich würde es im Report-Modus gehen, aber das hilft mir nur eingeschränkt. @alda: So mache ich es jetzt auch, bei < 20 Einträgen ist die zusätzliche Zeit zu vernachlässigen. |
AW: TListView - Eintrag löschen hinterlässt "Loch"
Würde es vermutlich. Aber man könnte so gucken, wo der Fehler ist.
|
AW: TListView - Eintrag löschen hinterlässt "Loch"
DisposeOf
Delphi-Quellcode:
procedure TForm1.ButtonClick(Sender: TObject);
var j : Integer; begin with ListView1 do for j := 0 to Items.Count - 1 do if j < Items.Count then if Items[j].Selected then Items[j].DisposeOf; end; |
AW: TListView - Eintrag löschen hinterlässt "Loch"
Moinsen
Das standard TListView verhält sich beim ViewStyle 'vsIcon' und 'vsSmallIcon' wie Du es beschreibst: Es bleibt eine Lücke. Bei vsList und vsReport *nicht*, da ist es so wie erwartet. Bei mir klappt das hier:
Delphi-Quellcode:
Procedure RemoveFromListView (LV : TListView; Index : Integer);
Var oldViewStyle : TViewStyle; begin oldViewStyle := LV.ViewStyle; LV.Items.BeginUpdate; try LV.Items.Delete(Index); LV.ViewStyle := vsReport; finally LV.ViewStyle := oldViewStyle; LV.Items.EndUpdate; End; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz