Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Listview Item onklick auslesen (https://www.delphipraxis.net/159022-listview-item-onklick-auslesen.html)

renekr 11. Mär 2011 07:42

Listview Item onklick auslesen
 
Hallo,

Ich habe schon gesucht aber leider nix gefunden.

Habe das Problem das ich eine Listview im Report Style habe.
1 Item und 1 Subitem.
Beim Onklick auf das Item geht es mit

Delphi-Quellcode:
memo1.text := Listview1.Items[Listview1.ItemIndex].SubItems[0];
Nun wenn ich auf das Subitem klicke kommt eine Zugriffsverletzung.

Kann mir ev. jemand nen Tipp geben.

Danke.

-187- 11. Mär 2011 08:41

AW: Listview Item onklick auslesen
 
Hmm wie jetzt? Du klickst doch auf das SubItem.

Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
begin
  ListView1.Items.Add;
  ListView1.Items[0].SubItems.Add('test');
  ListView1.Items[0].Caption:='test';
end;

procedure TForm2.ListView1Click(Sender: TObject);
begin
  Memo1.Text:=ListView1.Items[ListView1.ItemIndex].SubItems[0];
end;
Funktioniert. Oder wo ist das Problem ?

PS: Die Zugriffverletzung kommt logischerweise wenn du im ListView irgendwo hinklickst wo kein Item ist.

Bbommel 11. Mär 2011 09:38

AW: Listview Item onklick auslesen
 
Ich schätze mal, du hast die Eigenschaft "RowSelect" im ListView nicht auf "true" gestellt, insofern wird die Zeile vielleicht nicht ausgewählt, wenn du auf das Subitem klickst? Damit wäre dann der ItemIndex=-1 und die Excpetion kommt völlig zurecht.

Generell solltest aber sowieso noch ein
Delphi-Quellcode:
if ListView1.ItemIndex>=0 then
vorschalten. :)

renekr 11. Mär 2011 10:05

AW: Listview Item onklick auslesen
 
Hallo,

Also füllen tue ich es so.
Delphi-Quellcode:
for I := 0 to ADOQuery1.RecordCount - 1 do begin
      ListItem := ListView1.Items.Add;
      ListItem.Caption := ADOQuery1.FieldByName('Line').asstring;
      ListItem.SubItems.Add(ADOQuery1.FieldByName('SQL_Where').asstring);
      ADOQuery1.next;
end;
Leider hatte ich da vorher nen Fehler .
ListItem.SubItems.Text :=ADOQuery1.FieldByName('SQL_Where').asstring;

Dann hat es beim Klick auf das Subitem gekracht, Zugriffsverletzung.


Nun hab ich es so wie oben gemacht und ich bekomme beim Klick auf das Subitem immer itemindex -1.
Klick auf das Item funktioniert.

Edit:
Ohman nDanke Bbommel, das war es, Vielen Dank.
Ich habe es im Onklick schon drin mit dem Itemindex >-1.


Danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:32 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