【问题标题】:C# treeView, how do I get the parent nodes when user clicks the child nodeC#treeView,当用户单击子节点时如何获取父节点
【发布时间】:2013-05-03 10:16:23
【问题描述】:

我有一个树视图,它是在将文档加载到我的程序中时以编程方式生成的。

我的树视图看起来像这样:

+ System - 65
        + Subsystem - 32
          Subsystem - 68
                       + Subsubsystem - 01
                         Subsubsystem - 02

+ System - 70
        + Subsystem - 22
          Subsystem - 30
                       + Subsubsystem - 10

我需要能够单击“子子系统”子节点并让它在我的 listView 中填充属于相应系统和子系统的所有文档。例如,如果我要单击上面树视图的子子系统 10,我需要它返回属于系统 70、子系统 30 和子系统 10 的所有文档。

我正在努力解决的问题是当我单击它时知道如何获取子系统 10 的父节点。

显然,当我单击子系统 10 时,我的程序需要获取父节点才能返回属于相应系统和子系统的文档。

有什么想法吗?

【问题讨论】:

标签: c# treeview


【解决方案1】:

使用树视图的 afterselect 事件。在 TreeViewEventArgs 中,有您当前的节点。该节点有一个属性 parent。

private void treeView_AfterSelect(object sender, TreeViewEventArgs e)
{
    e.Node.Parent
}

【讨论】:

    【解决方案2】:

    您可以在AfterSelect 事件中使用TreeNode.Parent Property

    private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
    {  
    
       if(e.Node.Parent!= null && 
         e.Node.Parent.GetType() == typeof(TreeNode) )
       {
          // do something with e.Node.Parent
       }
       else
       {
         //"No parent node.";
       }
    }
    

    或者你可以从treeView1.SelectedNode.Parent获取父级

    【讨论】:

    • 谢谢大家,我找到了 .fullpath 方法,它几乎可以让我得到我想要的,但我需要重新使用节点键/名称,而不是文本。你知道怎么做吗??
    • 当您绑定数据时,您可以根据需要设置TreeNode.Tag 属性
    【解决方案3】:

    我使用一个简单的循环来做到这一点

        private TreeNode[] GetParentNodes(TreeNode node_)
        {
            TreeNode[] nodes_ = new TreeNode[node_.Level +1];
            nodes_[0] = node_;
            for (int i = 1; i < nodes_.Length; i++)
            {
                nodes_[i] = nodes_[i -1].Parent;
            }
            return nodes_;
        }
    

    并从树的单击事件(在我的情况下是右键单击)中调用它

    private void treeView1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == System.Windows.Forms.MouseButtons.Right)
            {
                processClick(e);
            }
        }
    
        private void processClick(System.Windows.Forms.MouseEventArgs e)
        {
    
            System.Drawing.Point p = new System.Drawing.Point(e.X, e.Y);
    
            TreeNode node = treeView1.GetNodeAt(p);
            treeView1.SelectedNode = node;
    
        }
    

    可以显着清理,但总体思路可行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多