2011-07-26 60 views
2

有树视图,MultiSelect:=true德尔福:取消选择树状视图中的选定项目

如果选择所有项目,则不可能取消选择或重新选择,而是选择其他选项。我认为我需要在TForm1.TreeView1Click上做TreeView1.Selected.Selected:=false;。但是如何知道点击是否不在控件上:项目,按钮?

视频:http://liga-installer.realservers.info/select.mp4

低于正常代码?

procedure TForm1.TreeView1Click(Sender: TObject); 
var 
Item: TTreeNode; 
begin 

    Item :=TTreeView(Sender).GetNodeAt(TTreeView(Sender).ScreenToClient(Mouse.CursorPos).X, 
    TTreeView(Sender).ScreenToClient(Mouse.CursorPos).y); 

    if (not Assigned(Item)) and (TTreeView(Sender).SelectionCount>0) then TTreeView(Sender).Select(nil, []); 
end; 

谢谢!

+1

我不明白。 –

+0

我可以播放视频。我创建一个新项目,选择所有项目,然后不能取消选择。 – maxfax

+0

不会发生在我身上... –

回答

1

您应该在按住Shift键的同时单击第一个选定的项目。您也可以通过按住Ctrl键单击取消选择一个项目。

但我同意这是违反直觉的。我会做

procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton; 
    Shift: TShiftState; X, Y: Integer); 
var 
    i: Integer; 
begin 
    if not Assigned(TreeView1.GetNodeAt(X, Y)) then 
    for i := 0 to TreeView1.Items.Count - 1 do 
     TreeView1.Items[i].Selected := false; 
end; 
+0

如何通过单击一次取消所有选择?再次按住键并点击很不方便。 – maxfax

+0

这就是控制的工作原理。 (与列表视图不同) –

+0

“我想我需要在TForm1.TreeView1Click上做TreeView1.Selected.Selected:= false;但是如何知道点击是否不在控件上:items,buttons?” – maxfax