添加節點時自動對 TreeView 進行排序
是否有一種簡單的方法可以將節點添加到 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將使用您的 newTreeNodeCollection,您可以覆蓋 the 的Add()方法TreeNodeCollection來執行您的建議。該方法必須: 1. 找到要插入的正確位置和 2. 插入新節點。
最簡單的實現將遍歷集合直到
thisNode.value<=newNode.value<nextNode.value. 然後插入之前nextNode.Index。如果您使用不同的搜尋算法,您可能會看到性能提升,具體取決於集合的大小。(想到類似二進制搜尋的東西。)
TreeNodeCollection注意:您也可以在做同樣事情的a 上創建一個擴展方法。但是,覆蓋該Add()方法可確保您TreeView始終排序。AddIntoSorted()如果在呼叫之前尚未對擴展方法進行排序,則僅創建擴展方法可能會導致未定義的結果。