PDA

View Full Version : مرتب سازی nodeها در TreeView



omidmehraban
پنج شنبه 08 شهریور 1386, 18:41 عصر
با سلام و احترام:
من می خواهم nodeهای TreeView را بصورت دلخواه مرتب کنم.
برای اینکار از متد sort خود treeview استفاده می کنم.کارش را عالی انجام میدهد،اما بعد از مرتب سازی،اگر بخواهید از مرتبسازی براساس حروف الفبا صرف نظر کنید،نمی شود.
البته MSDN میگوید از خصوصیت TreeViewNodeSorter استفاده کنید.
این هم لینکش:
ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.en/CPref17/html/P_System_Windows_Forms_TreeView_TreeViewNodeSorter .htm
کد زیر که مربوط به مقاله بالاست،nodeها را براساس اندازه انها مرتب میکند:

' Declare the TreeView.
Private WithEvents treeView1 As TreeView
Private textBox1 As TextBox
Private WithEvents button1 As Button


Private Sub InitializeTreeView1()

' Create the TreeView
treeView1 = New TreeView()
treeView1.Size = New Size(200, 200)

' Create the button and set some basic properties.
button1 = New Button()
button1.Location = New Point(205, 138)
button1.Text = "Set Sorter"

' Handle the click event for the button.
AddHandler button1.Click, AddressOf button1_Click

' Create the root nodes.
Dim docNode As New TreeNode("Documents")
Dim spreadSheetNode As New TreeNode("Spreadsheets")

' Add some additional nodes.
spreadSheetNode.Nodes.Add("payroll.xls")
spreadSheetNode.Nodes.Add("checking.xls")
spreadSheetNode.Nodes.Add("tracking.xls")
docNode.Nodes.Add("phoneList.doc")
docNode.Nodes.Add("resume.doc")

' Add the root nodes to the TreeView.
treeView1.Nodes.Add(spreadSheetNode)
treeView1.Nodes.Add(docNode)

' Add the TreeView to the form.
Controls.Add(treeView1)
Controls.Add(button1)

End Sub


' Set the TreeViewNodeSorter property to a new instance
' of the custom sorter.
Private Sub button1_Click(ByVal sender As Object, _
ByVal e As EventArgs) Handles button1.Click

treeView1.TreeViewNodeSorter = New NodeSorter()

End Sub 'button1_Click

' Create a node sorter that implements the IComparer interface.

Public Class NodeSorter
Implements IComparer

' Compare the length of the strings, or the strings
' themselves, if they are the same length.
Public Function Compare(ByVal x As Object, ByVal y As Object) _
As Integer Implements IComparer.Compare
Dim tx As TreeNode = CType(x, TreeNode)
Dim ty As TreeNode = CType(y, TreeNode)

If tx.Text.Length <> ty.Text.Length Then
Return tx.Text.Length - ty.Text.Length
End If
Return String.Compare(ty.Text, tx.Text)

End Function
End Class

من زیاد از قسمت مرتب سازیش سر در نمی یارم،اگر دوستان من را راهنمایی کنند لطف بزرگی کردند.

arsalansalar
شنبه 12 آبان 1386, 16:08 عصر
کسی نیست هم به این کاربر عزیز هم به ما کمک کند؟

arsalansalar
شنبه 12 آبان 1386, 22:17 عصر
اگر کسی کامپوننت تری ویو که امکان سورت بر روی نود ها هم داشته باشد دهد ممنون می شوم.

Reza_Shamayel
یک شنبه 13 آبان 1386, 11:59 صبح
ببین این روش به دردت میخوره؟

arsalansalar
یک شنبه 13 آبان 1386, 14:35 عصر
دوست عزیز از راهنماییت ممنون
اما این کدی که شما نوشته اید کل تری ویو را سورت می کند.من میخواهم اگر بر روی یک
rootکلیک کرد فقط زیر مجموعه های آن را سورت کند

Reza_Shamayel
یک شنبه 13 آبان 1386, 18:41 عصر
این یکی رو امتحان کن: