.NET treeview按节点类型按字母顺序排序
我有一个树视图,它实现了两种类型的项目,文件夹和项目。 当我对它们进行排序时,我希望这些项目显示在文件夹下面 像 如何修改排序例程.NET treeview按节点类型按字母顺序排序,.net,sorting,treeview,.net,Sorting,Treeview,我有一个树视图,它实现了两种类型的项目,文件夹和项目。 当我对它们进行排序时,我希望这些项目显示在文件夹下面 像 如何修改排序例程 Public Class ascsorter Implements Collections.IComparer Public Function Compare(ByVal x As Object, ByVal y As Object) _ As Integer Implements Collections.IComparer.Compare Dim
Public Class ascsorter
Implements Collections.IComparer
Public Function Compare(ByVal x As Object, ByVal y As Object) _
As Integer Implements Collections.IComparer.Compare
Dim tx As Windows.Forms.TreeNode = CType(x, Windows.Forms.TreeNode)
Dim ty As Windows.Forms.TreeNode = CType(y, Windows.Forms.TreeNode)
Return -String.Compare(tx.Text, ty.Text)
End Function
End Class
Public Class descsorter
Implements Collections.IComparer
Public Function Compare(ByVal x As Object, ByVal y As Object) _
As Integer Implements Collections.IComparer.Compare
Dim tx As Windows.Forms.TreeNode = CType(x, Windows.Forms.TreeNode)
Dim ty As Windows.Forms.TreeNode = CType(y, Windows.Forms.TreeNode)
Return String.Compare(tx.Text, ty.Text)
End Function
End Class
您需要能够区分哪些节点是文件夹,哪些节点是项目。
标记
属性可用于此操作。在本例中,我使用“a”表示文件夹,“b”表示项目:
带有标记的未排序节点示例:
Dim nodeA As New TreeNode("folder a") With {.Tag = "a"}
nodeA.Nodes.Add(New TreeNode("subitem z") With {.Tag = "b"})
nodeA.Nodes.Add(New TreeNode("subfolder a") With {.Tag = "a"})
nodeA.ExpandAll()
TreeView1.Nodes.Add(New TreeNode("folder b") With {.Tag = "a"})
TreeView1.Nodes.Add(nodeA)
TreeView1.Nodes.Add(New TreeNode("item b") With {.Tag = "b"})
TreeView1.Nodes.Add(New TreeNode("item a") With {.Tag = "b"})
TreeView1.TreeViewNodeSorter = New ascsorter
TreeView1.Sort()
以及首先对标记属性排序的更新比较器:
Public Class ascsorter
Implements Collections.IComparer
Public Function Compare(ByVal x As Object, ByVal y As Object) _
As Integer Implements Collections.IComparer.Compare
Dim tx As Windows.Forms.TreeNode = CType(x, Windows.Forms.TreeNode)
Dim ty As Windows.Forms.TreeNode = CType(y, Windows.Forms.TreeNode)
If Not tx.Tag.Equals(ty.Tag) Then
Return String.Compare(tx.Tag, ty.Tag)
End If
Return String.Compare(tx.Text, ty.Text)
End Function
End Class
注意:检查是否设置了标记属性时没有错误。您需要能够区分哪些节点是文件夹,哪些节点是项目。
标记
属性可用于此操作。在本例中,我使用“a”表示文件夹,“b”表示项目:
带有标记的未排序节点示例:
Dim nodeA As New TreeNode("folder a") With {.Tag = "a"}
nodeA.Nodes.Add(New TreeNode("subitem z") With {.Tag = "b"})
nodeA.Nodes.Add(New TreeNode("subfolder a") With {.Tag = "a"})
nodeA.ExpandAll()
TreeView1.Nodes.Add(New TreeNode("folder b") With {.Tag = "a"})
TreeView1.Nodes.Add(nodeA)
TreeView1.Nodes.Add(New TreeNode("item b") With {.Tag = "b"})
TreeView1.Nodes.Add(New TreeNode("item a") With {.Tag = "b"})
TreeView1.TreeViewNodeSorter = New ascsorter
TreeView1.Sort()
以及首先对标记属性排序的更新比较器:
Public Class ascsorter
Implements Collections.IComparer
Public Function Compare(ByVal x As Object, ByVal y As Object) _
As Integer Implements Collections.IComparer.Compare
Dim tx As Windows.Forms.TreeNode = CType(x, Windows.Forms.TreeNode)
Dim ty As Windows.Forms.TreeNode = CType(y, Windows.Forms.TreeNode)
If Not tx.Tag.Equals(ty.Tag) Then
Return String.Compare(tx.Tag, ty.Tag)
End If
Return String.Compare(tx.Text, ty.Text)
End Function
End Class
注意:检查标记属性是否设置了,没有错误。是的,我使用
Tag
属性处理大量类似的内容。tx这么多,我花了很多时间才想出这个简单的解决方案是的,我用Tag
属性来处理很多这样的东西。这么多,我要花很长时间才能想出这个简单的解决方案