2013-10-01 3 views
1

두 가지 유형의 항목, 폴더 및 항목을 구현하는 treeview가 있습니다. 언제 일종의 그들 나는 항목이.NET treeview 노드 유형별 알파벳순 정렬

folder a 
    subfolder a 
    subitem z 
folder b 
item a 
item b 

어떻게 내 정렬 루틴을 수정할 수 있습니다처럼 폴더 아래에 표시 할?

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 

답변

1

어떤 노드가 폴더이고 어떤 노드가 항목인지 구분할 수 있어야합니다. 이 경우 Tag 속성을 사용할 수 있습니다. 태그

샘플 분류되지 않은 노드 :

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"를 사용

참고 : Tag 속성이 설정되었는지 여부를 확인하는 데 오류가 없습니다.

+0

예 이런 종류의 물건에'Tag' 속성을 사용합니다. tx 너무 많이,이 단순한 해결책을 알아내는 데 나이를 먹었을 것입니다. – aelgoa