Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.NET treeview按节点类型按字母顺序排序_.net_Sorting_Treeview - Fatal编程技术网

.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
属性来处理很多这样的东西。这么多,我要花很长时间才能想出这个简单的解决方案