2011-07-26 100 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