ListView - Unsichtbare Spalte zur Laufzeit sichtbar machen

Rund um die LCL und andere Komponenten
Antworten
catweasel
Beiträge: 230
Registriert: Di 17. Mär 2009, 10:51
OS, Lazarus, FPC: Win10 64Bit // Linux Mint 20.0 - (L 2.2.0 FPC 3.2.2)

ListView - Unsichtbare Spalte zur Laufzeit sichtbar machen

Beitrag von catweasel »

Moin

Ich habe in meinem ListView eine Spalte (Column) angelegt die jedoch im Objectinspector auf visible=false steht, also beim Programmstart erst einmal nicht angezeigt wird.

Jetzt möchte ich die Spalte zur Laufzeit sichtbar machen und habe dazu folgende Zeile:

Code: Alles auswählen

ListView1.Column[5].Visible:=true;
Es passiert natürlich nichts. Ist das noch ein Bug in Listview?

Gruß
Michael

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: ListView - Unsichtbare Spalte zur Laufzeit sichtbar machen

Beitrag von theo »

Hast du ViewStyle auf vsReport ?

catweasel
Beiträge: 230
Registriert: Di 17. Mär 2009, 10:51
OS, Lazarus, FPC: Win10 64Bit // Linux Mint 20.0 - (L 2.2.0 FPC 3.2.2)

Re: ListView - Unsichtbare Spalte zur Laufzeit sichtbar machen

Beitrag von catweasel »

theo hat geschrieben:Hast du ViewStyle auf vsReport ?
Ja, ist auf vsReport

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: ListView - Unsichtbare Spalte zur Laufzeit sichtbar machen

Beitrag von theo »

Bei mir klappt das

ListView1.Column[1].visible:=Not ListView1.Column[1].visible;

Lazarus 0.9.31 r28409M FPC 2.4.2 i386-linux-gtk 2

catweasel
Beiträge: 230
Registriert: Di 17. Mär 2009, 10:51
OS, Lazarus, FPC: Win10 64Bit // Linux Mint 20.0 - (L 2.2.0 FPC 3.2.2)

Re: ListView - Unsichtbare Spalte zur Laufzeit sichtbar machen

Beitrag von catweasel »

ok, es funktioniert jetzt, allerdings:
  • 1. muß ich die Breite noch einmal manuell setzen (column[n].width) da der Wert aus dem Objectinspector nicht übernommen wird
    2. alle anderen unsichtbaren Spalten werden auch sichtbar, sobald man die Kopfzeile im ListView in die Breite zieht.
Ich hohle mal etwas weiter aus:

Ich habe ein ListView mit sechs Spalten, wobei einige sichtbar, einige unsichtbar und eines nur bei bedarf sichtbar sein soll
Column.0: immer sichtbar
Column.1: immer sichtbar
Column.2: immer sichtbar
Column.3: immer unsichtbar
Column.4: immer unsichtbar
Column.5: nur bei Bedarf sichtbar, voreingestellt ist unsichtbar

Starte ich das Programm sind nur die drei ersten Spalten sichtbar, alles ok.
Wenn jetzt die fünfte Spalte notwendig ist, mache ich folgendes:

Code: Alles auswählen

ListView1.Items.Item[zeile].SubItems.Add('der notwendige Text');
ListView1.Column[5].Visible:=true;
ListView1.Column[5].Width:=70;
Selbst wenn ich anschließend die die Spalten 3 und 4 definiert unsichtbar mache,

Code: Alles auswählen

ListView1.Column[3].Visible:=false;
ListView1.Column[4].Visible:=false;
kann ich sie in der Kopfzeile wieder aufziehen

Darf vielleicht zwischen sichtbaren Spalten keine unsichtbaren sein, sprich müssen die immer unsichtbaren am Ende des ListView sein?? :?:

Antworten