ListView: ItemIndex ?
ListView: ItemIndex ?
Hi,
ich möchte mit dem aktuell ausgewählten Eintrag eines ListViews etwas machen. In Delphi gibt es dafür ListView.ItemIndex, in Lazarus 24 (aktuellste Version bis jetzt) nicht. Im Forum habe ich gelesen, man könne anstelle von ItemIndex einfach Selected.Index benutzen, das funktioniert nicht: Wenn ich 3 Einträge habe und wähle Eintrag 3 aus, ist Selected.Index nicht mal gesetzt, wenn ich anschliessend Eintrag 1 auswähle, wird plötzlich etwas mit Eintrag 3 getan, um es zu verdeutlichen wähle ich nun noch Eintrag 2 aus und es passiert was mit Eintrag 1. Selected.Index ist also sozusagen im Rückstand. ItemFocused.Index ist ebenso immer im Rückstand. Was könnte ich tun um den wirklich aktuellen ItemIndex auszulesen ?
ich möchte mit dem aktuell ausgewählten Eintrag eines ListViews etwas machen. In Delphi gibt es dafür ListView.ItemIndex, in Lazarus 24 (aktuellste Version bis jetzt) nicht. Im Forum habe ich gelesen, man könne anstelle von ItemIndex einfach Selected.Index benutzen, das funktioniert nicht: Wenn ich 3 Einträge habe und wähle Eintrag 3 aus, ist Selected.Index nicht mal gesetzt, wenn ich anschliessend Eintrag 1 auswähle, wird plötzlich etwas mit Eintrag 3 getan, um es zu verdeutlichen wähle ich nun noch Eintrag 2 aus und es passiert was mit Eintrag 1. Selected.Index ist also sozusagen im Rückstand. ItemFocused.Index ist ebenso immer im Rückstand. Was könnte ich tun um den wirklich aktuellen ItemIndex auszulesen ?
-
- Beiträge: 370
- Registriert: Di 6. Feb 2007, 09:29
- OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
- CPU-Target: 32bit i386, ARM
- Wohnort: Oberösterreich
Genauer? Entweder der Index stimmt, oder er stimmt nicht. Aber genauer? Es wird wohl kaum sein, dass ein 'könnte sein, dass es 1 oder 2 ist' oder Index:=1.5; zurückkommt.pluto hat geschrieben:meines wissenens könnte sein das der Wert genauer ist...
Würden wir über Berechnungen mit Gleitkommazahlen reden, so würde ich ein "genauer" ja aktzeptieren, aber bei einem Index...

Bei mir funktionieren übrigens
Code: Alles auswählen
ListView1.Selected.Index
Code: Alles auswählen
ListView1.Selected.Caption
Wenn kein Element gewählt ist, wird so vermute ich -1 zurückgegeben. Ein Aufrufen der Caption müsste man eventuell abfangen.
So wollte ich es machen, ging aber nicht da ItemIndex fehlt:
So habe ich es nun gemacht, funktioniert nicht, siehe oben:
Ich benutze momentan Win32. Unter Linux werde ich es mit GTK2 kompilieren. Denn GTK2 sieht hier ziemlich mies aus und ich möchte eher darauf setzen etwas überall gut zu haben, statt irgendwo nicht so gut wenn gar nicht schlecht, da ist es mir die Arbeit eben wert.
Code: Alles auswählen
procedure TfrmMain.mmEditRadtourClick(Sender: TObject);
begin
if LV.ItemIndex > -1 then
begin
with frmCreate do
begin
ShowModal;
with LV.Items[LV.ItemIndex] do
begin
c := StrToInt(Caption);
eKM.Text := SubItems[0];
eRoute.Text := SubItems[1];
eDatum.Text := SubItems[2];
end;
end;
end;
end;
Code: Alles auswählen
procedure TfrmMain.mmEditRadtourClick(Sender: TObject);
begin
if LV.ItemFocused = nil then
Exit;
if LV.ItemFocused.Index > -1 then
begin
with frmCreate do
begin
ShowModal;
with LV.Items[LV.ItemFocused.Index] do
begin
c := StrToInt(Caption);
eKM.Text := SubItems[0];
eRoute.Text := SubItems[1];
eDatum.Text := SubItems[2];
end;
end;
end;
end;