You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Winforms中如何对TreeView的Level为0的根节点进行排序?

实现方案

核心思路

默认TreeView自带的Sort()方法会递归对所有层级节点排序,不符合需求,所以我们需要单独提取所有根节点排序后再重新赋值给TreeView.Nodes集合,子节点会跟随父节点自动保留原有顺序。

具体实现步骤

  • 第一步:先关闭TreeView的UI重绘,避免排序过程中闪烁
treeView1.BeginUpdate();
  • 第二步:提取所有根节点,转成列表后按你需要的规则排序(以下示例按节点Text升序,可自行修改排序逻辑)
// 提取所有根节点到临时列表
var rootNodes = treeView1.Nodes.Cast<TreeNode>().ToList();
// 按节点Text升序排序,可自定义排序规则,比如按Tag中存储的业务字段排序
rootNodes.Sort((a, b) => string.Compare(a.Text, b.Text, StringComparison.Ordinal));
  • 第三步:清空原有根节点集合,把排序后的根节点重新添加回去
treeView1.Nodes.Clear();
treeView1.Nodes.AddRange(rootNodes.ToArray());
  • 第四步:恢复UI重绘
treeView1.EndUpdate();

扩展封装(可选)

如果需要频繁调用根节点排序,可以封装成扩展方法,使用更灵活:

public static class TreeViewExtensions
{
    public static void SortRootNodes(this TreeView treeView, Comparison<TreeNode> comparison = null)
    {
        if (treeView == null) throw new ArgumentNullException(nameof(treeView));
        treeView.BeginUpdate();
        try
        {
            var rootNodes = treeView.Nodes.Cast<TreeNode>().ToList();
            // 未传入自定义排序规则时,默认按节点Text排序
            comparison ??= (a, b) => string.Compare(a.Text, b.Text, StringComparison.CurrentCulture);
            rootNodes.Sort(comparison);
            treeView.Nodes.Clear();
            treeView.Nodes.AddRange(rootNodes.ToArray());
        }
        finally
        {
            treeView.EndUpdate();
        }
    }
}

// 调用示例1:默认按Text排序
treeView1.SortRootNodes();
// 调用示例2:自定义按Tag存储的数值排序
treeView1.SortRootNodes((a, b) => ((int)a.Tag).CompareTo((int)b.Tag));

内容的提问来源于stack exchange,提问作者Hari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 05:09:02