0

ドキュメントがプログラムにロードされたときにプログラムで生成されるツリービューがあります。

私のツリービューは次のようになります。

+ 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 をクリックすると、プログラムは、それぞれのシステムとサブシステムに属するドキュメントを返すために、親ノードを取得する必要があります。

何か案は?

4

3 に答える 3

1

イベントTreeNode.Parent Propertyで使えるAfterSelect

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

于 2013-05-03T10:24:15.280 に答える
0

これを行うには、単純なループを使用します

    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;

    }

大幅にクリーンアップできますが、一般的な考え方は機能します。

于 2015-01-29T01:03:04.603 に答える