c# treeView,当用户单击子节点时,我如何获得父节点
本文关键字:何获得 父节点 单击 treeView 用户 子节点 | 更新日期: 2023-09-27 18:12:03
我有一个当文档加载到我的程序时以编程方式生成的树视图。
我的树视图看起来像这样:
+ 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时,我的程序需要获得父节点,以便返回属于各自系统和子系统的文档。
任何想法?
使用treeview的afterselect事件。在TreeViewEventArgs中,有你当前的节点。该节点有一个父属性。
private void treeView_AfterSelect(object sender, TreeViewEventArgs e)
{
e.Node.Parent
}
您可以在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
我使用一个简单的循环来完成这个
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_;
}
,并从
树的click事件(在我的例子中是右键)调用它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;
}
它可以被显著地清理,但总的想法是有效的