我有一个树形视图,当文档加载到我的程序中时,它以编程方式生成。
我的树视图看起来像这样:
+ System - 65
+ Subsystem - 32
Subsystem - 68
+ Subsubsystem - 01
Subsubsystem - 02
+ System - 70
+ Subsystem - 22
Subsystem - 30
+ Subsubsystem - 10
我需要能够点击'Subsubsystem'子节点并让我的listView与所有属于相应系统和子系统的文件一起弹出。例如,如果我点击上面树视图的子子系统10,我需要它返回属于System 70,Subsystem 30和Subsubsystem 10的所有文件。
我正在努力解决的问题是,当我点击它时,知道如何获得子系统10的父节点。
显然,当我点击子系统10时,我的程序需要获取父节点才能返回属于相应系统和子系统的文件。
有什么想法吗?
答案 0 :(得分:2)
使用树视图的afterselect事件。在TreeViewEventArgs中,有您当前的节点。该节点具有属性父级。
private void treeView_AfterSelect(object sender, TreeViewEventArgs e)
{
e.Node.Parent
}
答案 1 :(得分:0)
您可以在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
答案 2 :(得分: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;
}
它可以被大大清理,但总体思路有效。