居然C#的treeview的treeNode没有GetNext获取下一节点

本文介绍了一种在C#中自定义获取TreeView中TreeNode下一节点的算法,包括同级兄弟节点和父节点兄弟节点的逻辑处理,以及如何在视图上找到下一个节点的详细实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,C#里面的TreeNode有curNode.NextNode获取下一个节点的方法,但前提是获取的兄弟节点(即同级节点),最后一个节点返回的是null。

而我们一般查找TreeView里面的节点后,下一节点一般指视图上的下一个节点,若与当前节点同一级则是取下一个兄弟节点;若是最后1个节点,则需返回母节点的兄弟节点。

居然,网上还没类似的方案,只有自己动手解决了。

解决方案如下:

        public TreeNode GetNextNode(TreeNode curNode)
        {
            if (curNode == null) return null;

            if (curNode.Nodes.Count > 0)
            {
                return curNode.FirstNode; //1.返回自己的子节点优先
            }
            else //2.返回自己的兄弟节点
            {
                if (curNode.NextNode != null)
                {
                    return curNode.NextNode;
                }
                else //3.返回 父节点的兄弟节点
                {
                    while (curNode.Parent != null)
                    {
                        curNode = curNode.Parent;
                        if (curNode.NextNode != null) return curNode.NextNode;
                    }
                }
            }

            return null;
        }

测试:

   private void button1_Click(object sender, EventArgs e)
        {

            treeview1.SelectedNode = GetNextNode(treeview1.SelectedNode);
            if (treeview1.SelectedNode != null)
            {
                treeview1.SelectedNode.BackColor = Color.Red;
            }

        }

 

//把查找下一个的代码也Mark一下,免得下次找不到

      public static bool Contains(string sourceStr, string subStr, StringComparison comp)
        {
            return sourceStr.IndexOf(subStr, comp) >= 0;
        }

        public void FindNextNode(TreeView curTreeView, TreeNode curNode, string strValue)
        {
            if (string.IsNullOrEmpty(strValue))
            {
               // MessageBox.Show("查找内容为空,请重新设置。");
                return;
            }
            curNode = ClsCommon.GetNextNode(curTreeView.SelectedNode);

            // 忽略大小写
            while (curNode != null && !ClsCommon.Contains(curNode.Text, strValue, StringComparison.CurrentCultureIgnoreCase))
            {
                curNode = ClsCommon.GetNextNode(curNode);
            }

            if (curNode != null)
            {
                curTreeView.SelectedNode = curNode;
                curNode.BackColor = Color.YellowGreen; //改变查找的节点背景色showNodes(tn);
                this.Hide();
               // this.Close();
                return;
            }

            MessageBox.Show("没有匹配项。");
        }

 

测试:

     private void btn_next_Click(object sender, EventArgs e)
        {
            FindNextNode(tv_psiSi, tv_psiSi.SelectedNode, findText);
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值