2011-12-09 48 views
2

排序TreeView節點我寫了一個比較器,我想在TreeView的父節點上實現它,但我需要比較的是Node.Tag.ToString()而不是Text。據我看,有沒有超載或其他功能使用TreeView.Sort()做到這一點。通過比較theire標籤屬性

我想知道你是否有辦法或解決方法嗎?

回答

4

如果你有一個IComparer,它看起來像你可以設置TreeViewNodeSorter屬性,然後調用Sort按照你的意願對節點進行排序。基於該鏈接的

示例 - 沒試過,沒有null檢查等,但它應該工作:

public class NodeSorter : IComparer 
{ 
    public int Compare(object x, object y) 
    { 
     TreeNode tx = x as TreeNode; 
     TreeNode ty = y as TreeNode; 
     return string.Compare(tx.Tag.ToString(), ty.Tag.ToString()); 
    } 
} 

然後treeView1.TreeViewNodeSorter = new NodeSorter();某處您的設置。

+0

是的,但我相信這種類型的節點基於theire'文本'而不是'Tag' –

+0

@ Sean87:如果您在該鏈接底部的示例中查看'public class NodeSorter',則傳遞給'IComparer'本身就是'TreeNode',而不僅僅是文本。該示例仍然使用「Text」屬性(按長度排序而不是內容),但我沒有看到任何理由不應使用「Tag」屬性。我可以在一個例子中編輯。 – Rawling

+0

你是對的!我正在傳遞節點的文本!多麼可憐!非常感謝! –