Thema: Delphi ListView - Text auslesen

Einzelnen Beitrag anzeigen

Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#24

AW: ListView - Text auslesen

  Alt 29. Sep 2017, 15:42
Hallo Gerri,

ich habe dir mal schnell ein kleines Beispiel zusammengeklickt mit dem du etwas rumspielen kannst. Vielleicht bringt es dich ja weiter.

Deine Zeile ListView1.Items[1].Subitem[3]; sieht soweit OK aus. Allerdings heißt das nicht, dass du nicht evtl. vergessen hast, überhaupt (Sub)Items hinzuzufügen.



Kurze Erklärung zum Programm:

Beim Start der Anwendung wird im OnShow Event der Form der Header der TListView Komponente erzeugt. Danach werden ein paar Items hinzugefügt. Das ist ein Random Wert zwischen 1 und 100.

In der SpinEdit Komponente kannst du auswählen, welcher Text in dem Label unter dem ListView angezeigt werden soll.

Code:
0 = Text vom Hauptitem
1 = Text vom Subitem 1
2 = Text vom Subitem 2
3 = Text vom Subitem 3
Im Anhang ist ein kompiliertes Beispiel enthalten. Da du im Eröffnungspost angegeben hast, dass du Delphi Berlin verwendest, sollte es aber kein Problem für dich sein, die Anwendung erneut (mit Änderungen) zu kompilieren.


Anbei mal noch der SourceCode und ein Bild der Anwendung, damit andere da direkt Einblick haben ohne sich das ganze Projekt laden zu müssen.


Viel Spaß damit. Wenn du Fragen dazu hast ...

Delphi-Quellcode:
unit Main;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.StdCtrls, Vcl.Samples.Spin, System.UITypes;

type
  TfrmListViewSample = class(TForm)
    lv1: TListView;
    Label1: TLabel;
    btnGetItemText: TButton;
    seColumnSelector: TSpinEdit;
    lblItemCaption: TLabel;
    procedure FormShow(Sender: TObject);
    procedure btnGetItemTextClick(Sender: TObject);
  private
    procedure CreateHeader;
    procedure CreateItems;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  frmListViewSample: TfrmListViewSample;

implementation

{$R *.dfm}

procedure TfrmListViewSample.FormShow(Sender: TObject);
begin
  CreateHeader;
  CreateItems;
end;

procedure TfrmListViewSample.btnGetItemTextClick(Sender: TObject);
begin
  if Assigned(lv1.Selected) then
  begin
    if (seColumnSelector.Value = 0) then
      lblItemCaption.Caption := lv1.Selected.Caption
    else
      lblItemCaption.Caption := lv1.Selected.SubItems[seColumnSelector.Value - 1];
  end
  else
  begin
    MessageDlg('Es wurde kein Item ausgewählt.', mtWarning, [mbOK], 0);
  end;
end;

procedure TfrmListViewSample.CreateHeader;
var
  i: Integer;
  Column: TListColumn;
begin
  for i := 0 to 3 do
  begin
    Column := lv1.Columns.Add;
    Column.Caption := Format('Column %d', [i]);
    Column.Width := 75;
  end;
end;

procedure TfrmListViewSample.CreateItems;
var
  Item: TListItem;
  i: Integer;
begin
  for i := 0 to Random(100) + 1 do // Damit wenigstens immer 1 Item hinzugefügt wird
  begin
    Item := lv1.Items.Add;
    Item.Caption := Format('Main Item %d', [i]);
    Item.SubItems.Add(Format('Subitem %d.1', [i]));
    Item.SubItems.Add(Format('Subitem %d.2', [i]));
    Item.SubItems.Add(Format('Subitem %d.3', [i]));
  end;
end;
end.
Miniaturansicht angehängter Grafiken
listviewsample.png  
Angehängte Dateien
Dateityp: zip ListViewSample.zip (974,3 KB, 13x aufgerufen)
  Mit Zitat antworten Zitat