2011-02-24 24 views
1

當您選擇JvTreeView的多個節點,然後嘗試拖動這些節點時,JvTreeView將選擇您單擊的節點進行拖動,而不是啓動拖動所選節點的全部。您最終只拖動這個單個節點。如何在TJvTreeView中一次移動多個節點?

是否有可能在JvTreeView中拖動多個節點?我使用的是Delphi 2007.

更新:奇怪的是,如果在拖動項目時按住CTRL + SHIFT,我可以成功拖動它們。有任何想法嗎?

+0

@David:這難道不是有點苛刻嗎?這不像MultiSelect是特定於Delphi的TTreeView實現的東西... – 2011-02-24 19:53:50

+0

@David:lol。可憐的米克:) – 2011-02-24 20:25:09

+0

TJvTreeView是一個JEDI組件嗎?它通過TTreeView提供了什麼? – 2011-02-24 20:30:32

回答

2

假設MultiSelectStyle是默認[msControlSelect],然後回答你的問題是「當你選擇的最後一個項目,並開始拖你不鬆開控制鍵」。

罪魁禍首是TJvTreeView.WMLButtonDownJvComCtrls.pas。此處的代碼測試在TreeView爲MultiSelect時是否按下了「Ctrl」,如果沒有按下「Ctrl」,則清除所有項目並選擇單擊的項目。它應該測試點擊的項目是否已經被選中,如果是,則不做任何事情。

您可以在不拖動的情況下看到損壞的行爲。多選幾項,然後用鼠標單擊選中的項目。 VCL TreeView不選擇或取消選擇任何內容,而JVTreeView則取消選擇所有項目並選擇單擊的項目。

+0

有關如何修改該功能以允許用戶簡單地拖動突出顯示的節點的任何建議? – Mick 2011-02-24 22:57:26

+2

@Mick - 在程序結束附近找到'ClearSelection;'SelectItem(Node)'語句,並用'if if IsNodeSelected(Node)then begin'和'end;'包圍這兩個語句。但請記住,在選擇已選項目時,「OnSelectionChange」的附加副作用不會觸發。這是很好的海事組織,但如果你認爲不然的話,那麼你可以根據你的需要來適應代碼。 :) – 2011-02-24 23:15:45

1

是的,我一直這樣做。

當然多選需要是真的,你可能需要看看TTreeView的MultiSelectStyle。它控制可以同時選擇哪種類型的節點。例如,如果msSiblingOnly設置爲true,則只能選擇同類。

您是使用dmAutomatic還是dmManual。如果是後者,可能是因爲你在OnMouse *事件中做了某些事情,否定了之前做出的多重選擇。

+0

我道歉,這應該讀取JvTreeView,而不是標準的TreeView! – Mick 2011-02-24 19:44:37

+0

啊,在這種情況下,我想答案仍然沿着相同的路線,因爲我無法想象jvcl treeview無法做到這一點,但由於我不使用jvTreeView,我不能肯定地說。 – 2011-02-24 19:52:11

相關問題