【发布时间】:2021-08-12 07:21:29
【问题描述】:
我正在开发一个使用树视图的应用程序。树视图具有三种类型的节点:
- 根节点:无法排序,其标签包含字符串 “根”来识别它们
- 文件夹:可以排序的,想法是总是在顶部的其他节点之前,并按 A->Z 的升序排序。这些具有“文件夹”标签。
- 其他:想法是那些在文件夹之前,并且按 A->Z 升序排序
这是这个树形视图的外观:
这个想法是对根节点(声音、音频数据)内的所有子节点进行排序,并始终将文件夹放在节点之前。
我一直在尝试使用此代码,但不起作用:
// Create a node sorter that implements the IComparer interface.
public class NodeSorter : IComparer
{
public int Compare(object x, object y)
{
int resultComparing;
TreeNode tx = x as TreeNode;
TreeNode ty = y as TreeNode;
if (tx.Tag.ToString().Equals("Root") || ty.Tag.ToString().Equals("Root"))
{
resultComparing = 2;
}
else if (tx.Tag.ToString().Equals("Folder") || ty.Tag.ToString().Equals("Folder"))
{
resultComparing = string.Compare(tx.Tag.ToString(), ty.Tag.ToString(), true);
}
else
{
resultComparing = string.Compare(tx.Text, ty.Text, true);
}
return resultComparing;
}
}
代码经过优化也很有趣,因为这个树形视图可以轻松包含超过 500 个节点。
谢谢!
【问题讨论】:
-
当您说“无法对根节点进行排序”时,您是指以根节点为父节点的子节点吗?您的屏幕截图是否包含任何“根”节点?
-
是的,我的意思是像“音频数据”和“声音”这样的节点。
标签: c# winforms sorting treeview custom-sort