Einzelnen Beitrag anzeigen

Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.468 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: ListView, ich verstehe sie einfach nicht, suche Hilfe

  Alt 27. Mär 2022, 16:14
Zunächst muss man mittels der ViewStyle-Property die Ansicht umstellen auf vsRecord.

Spalten fügt man mittels der Columns-Property hinzu.

Dann kann man Zeilen mit der Items-Property hinzufügen. Der Text für die erste Spalte steht in deren Captions-Property und der Text für die weiteren Spalten in deren SubItems-Property:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  lc: TListColumn;
  li: TListItem;
begin
  lc := ListView1.Columns.Add;
  lc.Caption := 'Caption1';
  lc := ListView1.Columns.Add;
  lc.Caption := 'Caption2';
  lc := ListView1.Columns.Add;
  lc.Caption := 'Caption3';
  lc := ListView1.Columns.Add;
  lc.Caption := 'Caption4';

  li := ListView1.Items.Add;
  li.Caption := 'Item1';
  li.SubItems.Add('SubItem1.1');
  li.SubItems.Add('SubItem1.2');
  li.SubItems.Add('SubItem1.3');

  li := ListView1.Items.Add;
  li.Caption := 'Item2';
  li.SubItems.Add('SubItem2.1');
  li.SubItems.Add('SubItem2.2');
  li.SubItems.Add('SubItem2.3');
end;
Zugriff geht analog:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  li: TListItem;
  ErsteSpalte: string;
  ZweiteSpalte: string;
  DritteSpalte: string;
  VierteSpalte: string;
begin
  li := ListView1.Items[0];
  ErsteSpalte := li.Caption;
  ZweiteSpalte := li.SubItems[0];
  DritteSpalte := li.SubItems[0];
  VierteSpalte := li.SubItems[0];
end;
Es gibt leider keinen einfachen Zugriff wie beim StringGrid, deshalb bevorzuge ich in der Regel ein StringGrid oder ein DrawGrid (letzteres ist aber wieder komplexer), allerdings gibt es Leute, die finden, das sieht "veraltet" aus.

Man kann sich natürlich den Zugriff analog zum StringGrid selbst programmieren:

Delphi-Quellcode:
function TListView_GetCell(_lv: TListView; _Row, _Col: integer): string;
begin
  li := _lv.Items[_Row];
  if _Col = 0 then
    Result := li.Caption
  else
    Result := li.SubItems[_Col-1];
end;
Schreibzugriff dann analog dazu.
Thomas Mueller

Geändert von dummzeuch (27. Mär 2022 um 16:21 Uhr)
  Mit Zitat antworten Zitat