Unable to remove selected state of TreeView item
Original Reporter info from Mantis: Python
-
Reporter name:
Original Reporter info from Mantis: Python
- Reporter name:
Description:
Command
TreeView1.Items[1].Selected:=false;
didn't really remove selected state from given item (if it's already selected)
Steps to reproduce:
Create a new LCL application, place TTreeView named TreeView1 and a button named Button1 onto default form. Using Object Inspector, set TreeView1's MultiSelect property to true, then add three items (or more) by GUI editor to TTreeView1. Double-click on Button1 and place such code in Button's onclick:
\---<br/>
TreeView1.Items[0].Selected:=true;
TreeView1.Items[1].Selected:=true;
TreeView1.Items[2].Selected:=true;
TreeView1.Items[1].Selected:=false;
---
Run the program and click
What expected: elements 0 and 2 are selected, element 1 is NOT selected.
What happens: elements 0,1,2 are all selected.
Test project included.
Additional information:
Solution (testing required):
In procedure TTreeNode.SetSelected(AValue: Boolean);
when removing Selected state from
Exclude(FStates,nsSelected);
remove also nsMultiSelected:
Exclude(FStates,nsMultiSelected);
Workaround (in current conditions, no LCL code correction required):
// inverts selection state for multiselected TTreeView
procedure CtrlSelectTreeItem(TreeView:TTreeView;Item:TTreeNode);
var
List:TList;
I:integer;
begin
List:=TList.Create;
try
// save currently selected items in a list
For I:=0 to TreeView.Items.Count-1 do begin
if TreeView.Items[I].Selected then begin
List.Add(TreeView.Items[I]);
end;
end;
// if item already in list, remove, otherwice include
if List.IndexOf(Item)<0 then
List.Add(Item)
else
List.Remove(Item);
// set selected items
TreeView.Select(List);
finally
List.Free;
end;
end;
Mantis conversion info:
- Mantis ID: 31477
- OS: Windows
- OS Build: XP
- Build: SVN revision 51630
- Platform: x86
- Version: 1.6