Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - TListView: Untereinträge löschen


CrazyLuke - So 01.08.04 13:55
Titel: TListView: Untereinträge löschen
Ist es möglich, in einer TListView alle Untereinträge zu löschen (die normalen Einträge sollen bestehen bleiben)?


Keldorn - So 01.08.04 16:32

was verstehst du unter normalen Einträgen, die Caption und als untereintraäge die Subitems?

dann nimm subitems.clear und veranlasse ein neuzeichnen der Listview.

Mfg Frank


CrazyLuke - Sa 28.08.04 14:30

Hallo.

Ich hab einiges probiert, aber er kennt den Befehl nicht. Wie kann ich nun die zweite Spalte der ListView vor einer erneuten Suche löschen?

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure TForm1.Button11Click(Sender: TObject);
begin
Label33.Caption:='Status:  Suche gestartet - bitte warten!';
ListView1.Repaint;
application.processmessages;

if FileExists(ComboBox1.Items[ComboBox1.ItemIndex] + 'alphaaudio\alphaplayer.exe'then
  ListView1.Items.Item[0].SubItems.Add('VORHANDEN!')
  else
  ListView1.Items.Item[0].SubItems.Add('nicht gefunden');

if FileExists(ComboBox1.Items[ComboBox1.ItemIndex] + 'cactuspj.exe'then
  ListView1.Items.Item[1].SubItems.Add('VORHANDEN!')
  else
  ListView1.Items.Item[1].SubItems.Add('nicht gefunden');

if FileExists(ComboBox1.Items[ComboBox1.ItemIndex] + 'player\yucca.cds'then
  ListView1.Items.Item[2].SubItems.Add('VORHANDEN!')
  else
  ListView1.Items.Item[2].SubItems.Add('nicht gefunden');

  Label33.Caption:='Status:  Suche beendet.';
end;

Hab auch schonmal Refresh probiert, aber wenn ich auf einer CD suche und er ne Datei findet, bleibt das Ergebnis immer bei einer Suche im anderen CD-Laufwerk da stehen...


Keldorn - Sa 28.08.04 15:16

du mußt dich natürlich schon ein wenig mit deinem code auseinandersetzen.
wenn du schreibst
Zitat:

ListView1.Items.Item[0].SubItems.Add('VORHANDEN!')

und ich
Zitat:

subitems.clear

kann man da nicht auf die Idee kommen ?

Delphi-Quelltext
1:
2:
ListView1.Items.Item[0].SubItems.clear;
listview1.repaint;


Obwohl in deinem Fall würde ich das nicht so machen. Ich würde beim Erstellen der Listview dafür sorgen, das zu jedem Eintrag die entprechenden Subitems da sind (subitems.add('') als leeres Subitem) und dann beim Ändern (Löschen wieder '' zuweisen):

Delphi-Quelltext
1:
ListView1.Items.Item[0].SubItems[0]:='Vorhanden';                    

das subitem muß dann aber existieren, sonst siehst du eine Exception, wie bei deine anderen thread. Würd ich aber besser finden, als das ständige löschen und neu hinzufügen

Mfg Frank


CrazyLuke - Sa 28.08.04 15:53

Danke, es funzt jetzt.

Hab gedacht, mit dem "SubItems.Clear" wärs möglich, sämtliche SubItems zu löschen (und nicht nur die von einem Item).


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure TForm1.Button11Click(Sender: TObject);
begin
Label33.Caption:='Status:  Suche gestartet - bitte warten!';
ListView1.Refresh;
application.processmessages;

if FileExists(ComboBox1.Items[ComboBox1.ItemIndex] + 'alphaaudio\alphaplayer.exe'then
  ListView1.Items.Item[0].SubItems[0]:='VORHANDEN!'
  else
  ListView1.Items.Item[0].SubItems[0]:='nicht gefunden';

if FileExists(ComboBox1.Items[ComboBox1.ItemIndex] + 'cactuspj.exe'then
  ListView1.Items.Item[1].SubItems[0]:='VORHANDEN!'
  else
  ListView1.Items.Item[1].SubItems[0]:='nicht gefunden';

if FileExists(ComboBox1.Items[ComboBox1.ItemIndex] + 'player\yucca.cds'then
  ListView1.Items.Item[2].SubItems[0]:='VORHANDEN!'
  else
  ListView1.Items.Item[2].SubItems[0]:='nicht gefunden';

  Label33.Caption:='Status:  Suche beendet.';
end;


Keldorn - Sa 28.08.04 18:23

CrazyLuke hat folgendes geschrieben:

Hab gedacht, mit dem "SubItems.Clear" wärs möglich, sämtliche SubItems zu löschen (und nicht nur die von einem Item).

wenn du

Delphi-Quelltext
1:
ListView1.Items.Item[0].SubItems.Add('VORHANDEN!')                    

schreibst, fügst du dann den eintrag zu sämtlichen subitems hinzu, oder nur für das eine subitem ;) ? gleiches gilt fürs subitems.clear.

Mfg Frank


CrazyLuke - Sa 28.08.04 19:38

Naja, hab gedacht es gäb nen Befehl zum Löschen aller SubItems. Aber so funktioniert es ja auch sehr gut - und ich kann direkt die zukünftigen zu scannenden Kopierschutzmethoden eintragen und als SubItem steht dann da generell " - in Vorbereitung - " 8)

Danke :!: