Listview sortieren: Makevisible(False)
Hallo Leute,
Ich probiere eine Art Sortierung fuer meine Listview zu bauen. In der 3ten Spalte stehen die Werte wonach geguckt werden soll. Die Werten koennen sein: Zitat:
Jetzt wollte ich das mit MakeVisible() hinkriegen aber es klappt nicht ganz. MakeVisible und nicht Delete denn die andere Werte sollen in der LV drin bleiben aber nicht zu sehen sein.
Delphi-Quellcode:
PS: Es handelt sich hier um keine Virtuellen Listview.
procedure Form.SortierClick(Sender: TObject);
var listitem : TListItem; i: integer; begin for i := 0 to listview.Items.Count -1 do begin if listitem.SubItems[1] = 'Films - DVDr' then begin Listview.Items.Item[i].MakeVisible(False); end; end; end; Recht herzlichen Dank. |
Re: Listview sortieren: Makevisible(False)
Lösche die Einträge. Der Listview sollte nicht zur Datenhaltung, sondern nur zur Visualisierung verwendet werden. Damit trennst du dann auch OOP konform doe Daten von der Oberfläche.
|
Re: Listview sortieren: Makevisible(False)
Hi Lucki,
Delphi-Quellcode:
Hat jemand nen Vorschlag?
procedure TDemoForm.Button6Click(Sender: TObject);
var listitem : TListItem; i: integer; begin for i := 0 to listview.Items.Count -1 do begin if listitem.SubItems[1] = 'Films - DVDr' then <----- AccesViolation begin Listview.Items.Item[i].Delete; end; end; end; |
Re: Listview sortieren: Makevisible(False)
Bei einer for-Schleife wird die Bedingung im Schleifenkopf nur einmal überprüft. Wenn du jetzt einen Eintrag löscht, läuft die Schleife zu weit und es kracht. Lösung: Lass die Schleife rückwärte mit downto laufen.
|
Re: Listview sortieren: Makevisible(False)
Hmmm Lucki,
Delphi-Quellcode:
procedure TDemoForm.Button6Click(Sender: TObject);
var listitem : TListItem; i: integer; begin for i := pred(listview.Items.Count) downto 0 do begin if listitem.SubItems[1] = 'Films - DVDr' then <------------- hier stimmt was nicht. begin Listview.Items.Item[i].Delete; end; end; end; |
Re: Listview sortieren: Makevisible(False)
Zitat:
|
Re: Listview sortieren: Makevisible(False)
Ja sry Lucki,
Zitat:
Wie greife ich in den Loop darauf zu? Er gibt den Fehler in listitem.SubItems[1]. Gruss Lucius. |
Re: Listview sortieren: Makevisible(False)
Wenn es die dritte Spalte ist, warum gibst du denn dann als Index 1 ein? Etwas mehr nachdenken beim Programmieren bitte.
|
Re: Listview sortieren: Makevisible(False)
Sorry Lucki das ich deine Zeit verplempere.
Zitat:
Ich gebe es auf. |
Re: Listview sortieren: Makevisible(False)
nur so ne frage, wo weißt du listitem zu ?
ich quellcode find ich nirgends ein "listitem := listview.items[i];" oder ähnliches |
Re: Listview sortieren: Makevisible(False)
Hallo,
SubItems[1] ist schon richtig :wink:
Code:
1. mit Zuweisung der Items
Spalte 1 | Spalte 2 | Spalte 3 |
Caption | SubItems[0] | SubItems[1] |
Delphi-Quellcode:
2. ohne Zuweisung
var z : Integer;
aItem : TListItem; begin for z := ListView1.Items.Count-1 downto 0 do begin aItem := ListView1.Items[z]; if aItem.SubItems[1] <> 'Delphi' then aItem.Delete; end;
Delphi-Quellcode:
var z : Integer;
begin for z := ListView1.Items.Count-1 downto 0 do if ListView1.Items[z].SubItems[1] <> 'Delphi' then ListView1.Items[z].Delete; |
Re: Listview sortieren: Makevisible(False)
Klapt wunderbar Lannes, vielen herzlichen Dank an dir.
Jetzt noch die Frage wie mach ich das die Listitems die deleted wurden wieder in der Listview sichtbar sind?
Delphi-Quellcode:
Auch die anderen Danke fuer eure Antworten.
procedure THaupt.MusikClick(Sender: TObject);
var z : Integer; begin if Musik.Checked = false then begin for z := ListView.Items.Count-1 downto 0 do if ListView.Items[z].SubItems[1] = 'Musik - Album' then ListView.Items[z].Delete; end else ...... <---- wieder sichtbar machen. Gruss Lucius.. |
Re: Listview sortieren: Makevisible(False)
Denn ich glaube die items die mit ListView.Items[z].Delete geloescht wurden sind fuer immer weg oder?
Gruss Lucius. |
Re: Listview sortieren: Makevisible(False)
Jupp. Einfach wieder aus der Datenmenge holen und einfügen, deswegen solltest du ja den Listview nicht zur Datenhltung missbrauchen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:25 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