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

如何在C#中将TreeView按字母排序且W开头节点置顶?

TreeView自定义排序:将W开头的节点置于顶部

你的代码有几个关键问题导致没达到预期效果:

  • 用了Contains("W")而非StartsWith("W"),会把名字里包含W的节点都纳入判断,而非仅以W开头的节点
  • 逻辑判断完全偏离需求,错误引入了Z的判断条件,且分支逻辑覆盖不全
  • 混淆了Name和Text属性,排序时未统一使用同一个字段
  • 不符合条件就返回0,会让TreeView认为这些节点排序优先级相同,导致顺序混乱

下面是修正后的排序器代码,实现所有以W开头的节点排在最顶部,其余节点按字母正常排序:

public int Compare(object thisObj, object otherObj)
{
    TreeNode thisNode = thisObj as TreeNode;
    TreeNode otherNode = otherObj as TreeNode;

    // 判断节点文本是否以W开头(忽略大小写可加第二个参数,不需要则删除)
    bool thisStartsWithW = thisNode.Text.StartsWith("W", StringComparison.OrdinalIgnoreCase);
    bool otherStartsWithW = otherNode.Text.StartsWith("W", StringComparison.OrdinalIgnoreCase);

    if (thisStartsWithW && !otherStartsWithW)
    {
        // 当前节点以W开头,另一个不是,当前节点排前面
        return -1;
    }
    else if (!thisStartsWithW && otherStartsWithW)
    {
        // 当前节点不以W开头,另一个是,另一个节点排前面
        return 1;
    }
    else
    {
        // 两个都以W开头或都不以,按字母顺序排序
        return string.Compare(thisNode.Text, otherNode.Text, StringComparison.OrdinalIgnoreCase);
    }
}

细节说明:

  • 如果需要区分大小写排序,删除StringComparison.OrdinalIgnoreCase参数即可
  • 若实际需按Name属性排序,将代码中所有Text替换为Name即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:15:33