temz 2023-04-11 14:58 采纳率: 100%
浏览 67
已结题

C#treeview中Find方法和Expand方法的问题

if (treeNodeselected != null)
            {
                if (Check(treeView1.Nodes, treeNodeselected.Text))  
 //检查在treeView1的节点中treeNodeselected.Text是否存在,存在则返回true
                {
                    TreeNode[] nodes = this.treeView1.Nodes.Find(treeNodeselected.Name, true);
                    int a=nodes.Length;                              
//由于有上面的Check保证treeNodeselected.Text节点在treeView中肯定是存在的,
 //但使用Find方法之后nodes.Length一直是0
                    if (treeNodeselected.Parent == null)
                    {
                        treeView1.Nodes[0].Expand();     
                        treeView1.Nodes[0].Expand();
 //这里使用一次Expand()无法展开,必须写两次才能展开不知道为什么
                    }
                }
            }

使用C#treeview中的Find()方法,但是在运行如下语句时
TreeNode[] nodes = this.treeView1.Nodes.Find(treeNodeselected.Text, true);
nodes.length一直是0,而treeNodeselected.Text的节点确实是存在,这是为什么
另外, treeView1.Nodes[0].Expand();写一次运行没有效果,必须写两次才会有效果是怎么回事

  • 写回答

9条回答 默认 最新

  • 「已注销」 2023-04-11 16:57
    关注

    引用new bing作答:
    第一个问题:
    C# TreeView 中的 Find 方法搜索具有特定 Name 属性的节点,而不是 Text 属性。 在您的代码中,您将 treeNodeselected 节点的 Text 属性传递给 Find 方法,这就是它无法找到任何节点的原因。 您需要改为传递 Name 属性。
    这是更正后的代码:

    TreeNode[] nodes = this.treeView1.Nodes.Find(treeNodeselected.Name, true);
    

    第二个问题:
    TreeNode 的 Expand 方法展开节点及其所有子节点。 如果节点已经展开,再次调用 Expand 无效。 但是,有可能第一次调用 Expand 没有完成所有子节点的展开,所以再次调用它可能会完成展开过程。 这就是为什么您看到需要两次调用 Expand 的原因。
    您可以修改您的代码以确保在尝试访问其子节点之前该节点已完全展开。 您可以通过订阅 TreeView.AfterExpand 事件并检查节点的 IsExpanded 属性来执行此操作。

    这是一个示例代码片段:

    private void treeView1_AfterExpand(object sender, TreeViewEventArgs e)
    {
        if (e.Node.IsExpanded)
        {
            // Access the child nodes here
        }
    }
    

    在您的代码中,您可以订阅此事件并将访问子节点的代码移动到事件处理程序中。 这样,您可以确保在尝试访问其子节点之前节点已完全展开。

    if (treeNodeselected.Parent == null)
    {
        treeView1.Nodes[0].Expand();
        // Move the code that accesses the child nodes here
    }
    
    // Subscribe to the AfterExpand event
    treeView1.AfterExpand += treeView1_AfterExpand;
    
    // Define the event handler
    private void treeView1_AfterExpand(object sender, TreeViewEventArgs e)
    {
        if (e.Node == treeView1.Nodes[0] && e.Node.IsExpanded)
        {
            // Access the child nodes here
        }
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(8条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月18日
  • 已采纳回答 4月18日
  • 创建了问题 4月11日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效