Dot-Net

添加節點時自動對 TreeView 進行排序

  • May 25, 2018

是否有一種簡單的方法可以將節點添加到 WinForms .NET TreeView 控制項,其中正在添加的新節點插入到正確的索引處,以便整個節點列表按字母順序排序?結果幾乎與TreeView.Sort().

我有一個不斷增長到幾百個節點的 TreeView。使用者可以隨著它的增長實時查看這個 TreeView。我寧願只在正確的索引處插入節點,而不是每次添加節點後呼叫 TreeView.Sort() 。

這可以做到嗎?

在 winforms 中,您可以簡單地將 TreeView 的.Sorted屬性設置為True.

當 Sorted 設置為 true 時,TreeNode 對象按其 Text 屬性值的字母順序排序。將大量項目添加到已排序的 TreeView 時,應始終使用 BeginUpdate 和 EndUpdate 來保持性能。當現有節點的文本發生更改時,您必須呼叫 Sort 來重新排序這些項目。

參考MSDN

為什麼不創建繼承自TreeView和的新類TreeNodeCollection?newTreeView將使用您的 new TreeNodeCollection,您可以覆蓋 the 的Add()方法TreeNodeCollection來執行您的建議。

該方法必須: 1. 找到要插入的正確位置和 2. 插入新節點。

最簡單的實現將遍歷集合直到thisNode.value<=newNode.value<nextNode.value. 然後插入之前nextNode.Index。如果您使用不同的搜尋算法,您可能會看到性能提升,具體取決於集合的大小。(想到類似二進制搜尋的東西。)

TreeNodeCollection注意:您也可以在做同樣事情的a 上創建一個擴展方法。但是,覆蓋該Add()方法可確保您TreeView始終排序AddIntoSorted()如果在呼叫之前尚未對擴展方法進行排序,則僅創建擴展方法可能會導致未定義的結果。

引用自:https://stackoverflow.com/questions/390802