AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TListView - Eintrag löschen hinterlässt "Loch"
Thema durchsuchen
Ansicht
Themen-Optionen

TListView - Eintrag löschen hinterlässt "Loch"

Ein Thema von Daniel · begonnen am 31. Jul 2015 · letzter Beitrag vom 2. Aug 2015
Antwort Antwort
Seite 1 von 2  1 2      
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#1

TListView - Eintrag löschen hinterlässt "Loch"

  Alt 31. Jul 2015, 18:25
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.
listview.jpg


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

Geändert von Daniel (31. Jul 2015 um 18:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#2

AW: TListView - Eintrag löschen hinterlässt "Loch"

  Alt 31. Jul 2015, 19:25
Hallo Daniel,

Ich gehe auf Grund der Optik von FMX aus. Oder ist das VCL? Hast du vergessen zu erwähnen.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

AW: TListView - Eintrag löschen hinterlässt "Loch"

  Alt 31. Jul 2015, 20:29
Die Items sind mehrzeilig, wenn ich das richtig sehe. Zeichnest du die selbst? Wenn ja, nimm den Code mal raus.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: TListView - Eintrag löschen hinterlässt "Loch"

  Alt 31. Jul 2015, 23:29
Pure VCL, nichts selbstgezeichnet.
Das sind die Listview-Tiles. Den Code dafür habe ich aus Deinen Tutorials, Michael.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: TListView - Eintrag löschen hinterlässt "Loch"

  Alt 31. Jul 2015, 23:41
Wie verhält er sich im Reportstil?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
alda

Registriert seit: 24. Mär 2014
Ort: Karlsruhe
93 Beiträge
 
Delphi XE6 Architect
 
#6

AW: TListView - Eintrag löschen hinterlässt "Loch"

  Alt 31. Jul 2015, 23:42
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
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: TListView - Eintrag löschen hinterlässt "Loch"

  Alt 1. Aug 2015, 11:23
@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.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

AW: TListView - Eintrag löschen hinterlässt "Loch"

  Alt 1. Aug 2015, 11:29
Würde es vermutlich. Aber man könnte so gucken, wo der Fehler ist.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#9

AW: TListView - Eintrag löschen hinterlässt "Loch"

  Alt 1. Aug 2015, 12:23
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;
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#10

AW: TListView - Eintrag löschen hinterlässt "Loch"

  Alt 2. Aug 2015, 07:55
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;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz