![]() |
ListView und Checkboxen. RowSelect ausführen.
Hallo zusammen,
ich steh mal wieder auf der Leitung. Es wird wahrscheinlich ein ganz simple Lösung für mein Problem geben. Allerdings schaffe ich es seid gestern nicht, beim Klick in einen Checkbox einer ListView, die komplette Zeile zu Selektieren. Es soll egal sein, ob die Checkbox Checked oder Unchecked ist. Es soll einfach nur wie beim klick in die Listview die entsprechende Zeile selektiert werden. Hier mal mein derzeitiger Code...
Delphi-Quellcode:
Allerdings ist hier das Problem, das somit in der Listview immer alle Selektiert bleiben die mal über die Checkbox selektiert wurden. Da ich aber MultiSelect = false habe, kommte es natürlich zum Stack überlauf.Gibt es da nicht irgendeine einfache Möglichkeit.
procedure TMailSendenForm.lvGroupChange(Sender: TObject; Item: TListItem;
Change: TItemChange); begin if lvGroup.Selected <> nil then begin if Change = ctState then if Item.Checked then begin Item.Selected := true; end; end; end; Ich will eigendlich nur, das beim Klick in die Checkbox die gesamte Zeile Selektiert wird aber auch immer max. 1 Zeile selektiert sein darf. Danke schon mal für die Anregung Gruß Jens |
Re: ListView und Checkboxen. RowSelect ausführen.
Zitat:
Delphi-Quellcode:
schon mal raus sonst wird die Zeile nur markiert wenn die CheckBox ausgewählt wurde.
if Item.Checked then
Zitat:
|
Re: ListView und Checkboxen. RowSelect ausführen.
Zitat:
Ich kann ja mit dem Befehl
Delphi-Quellcode:
Nur festlegen, das ein selektieren möglich ist.
Item.Selected
|
Re: ListView und Checkboxen. RowSelect ausführen.
Hallo Jens,
ich bevorzuge eigentlich das VirtualTreeView, deshalb kann ich nicht garantieren, dass der folgende Code immer fehlerfrei funktioniert:
Delphi-Quellcode:
Gruß Hawkeye
type
TForm1 = class (TForm) [..] private FWasChecked: Boolean; end; procedure TForm1.ListViewChanging (Sender: TObject; Item: TListItem; Change: TItemChange; var AllowChange: Boolean); begin FWasChecked := Assigned(Item) and Item.Checked; end; procedure TForm1.ListViewChange (Sender: TObject; Item: TListItem; Change: TItemChange); begin if (Assigned(Item) and (Item.Checked <> FWasChecked)) then begin ListView.ItemFocused := Item; ListView.Selected := Item; end; end; |
Re: ListView und Checkboxen. RowSelect ausführen.
Danke Hawkeye219,
geht so. Ich habe allerdings noch ein..
Delphi-Quellcode:
vor deine Funktion gepackt, da sonst beim Prgrammstart durch das OnCreate schon der letzte eintrag den Selected Zustand erhält. Mit der unten ergänzten Version funktioniert es nun so, wie ich will.
if lvGroup.Focused <> false then
Delphi-Quellcode:
Danke und Gruß Jens
procedure TMailSendenForm.lvGroupChange(Sender: TObject; Item: TListItem;
Change: TItemChange); begin if lvGroup.Focused <> false then begin if (Assigned(Item) and (Item.Checked <> FWasChecked)) then begin lvGroup.ItemFocused := Item; lvGroup.Selected := Item; end; end; end; procedure TMailSendenForm.lvGroupChanging(Sender: TObject; Item: TListItem; Change: TItemChange; var AllowChange: Boolean); begin if lvGroup.Focused <> false then FWasChecked := Assigned(Item) and Item.Checked; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz