treeview 单击父节点事件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了treeview 单击父节点事件相关的知识,希望对你有一定的参考价值。

treeview 单击父节点事件,单击一下 如果子节点是展开的,就收缩,如果是收缩的就展开,如果没有,就提示空
网上说有NodeMouseClick 事件 我没找到啊(.net 2.0) 做网页
ASP.Net 2.0中是没有 NodeMouseClick 事件的.. 哪个里面有。3.5?

只能收缩不能展开

ASP.Net 2.0中是没有 NodeMouseClick 事件的..
但是可以使用 SelectedNodeChanged 事件来代替..
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)

this.TreeView1.SelectedNode.ToggleExpandState();

代码是这样的..

看看这样的能不能达到你说的效果
参考技术A private void tvTemp_Click(object sender, EventArgs e)

TreeView tv = sender as TreeView;

if (tv != null && tv.SelectedNode != null)

if (tv.SelectedNode.Nodes.Count > 0)

tv.SelectedNode.Toggle();

else

MessageBox.Show("没有子节点");




测试通过
参考技术B 这样就可以了:
private void tvTemp_Click(object sender, EventArgs e)

TreeView tv = sender as TreeView;

if (tv != null && tv.SelectedNode != null)

if (tv.SelectedNode.Nodes.Count > 0)

tv.SelectedNode.Toggle();

else

MessageBox.Show("没有子节点");


参考技术C 用SelectedNodeChanged时间具体操作你在方法里处理就可以了

怎么让所有子节点被选中,父节点自动选中 TreeView

代码就不贴了,给你个解决的方法,判断节点的选中状态,然后获取该节点的父节点下的所有子节点,判断是否所有子节点都选中了,若是的话就选中父节点追问

但要写到哪个事件里面啊?要是写到AfterCheck里面就是死循环啊。

追答

死循环的话肯定是你的代码问题了

参考技术A //设置标志,防止死循环
bool check = false;

//节点勾选后事件,如果更改某一节点状态会自动触发,所以在后面的方法中无需递归
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)

if(check==false)
setchild(e.Node);
setparent(e.Node);
check = false;


//设置子节点状态
private void setchild(TreeNode node)

foreach (TreeNode child in node.Nodes)

child.Checked = node.Checked;

check = true;


//设置父节点状态
private void setparent(TreeNode node)

if (node.Parent != null)

//如果当前节点状态为勾选,则需要所有兄弟节点都勾选才能勾选父节点
if (node.Checked)
foreach (TreeNode brother in node.Parent.Nodes)

if (brother.Checked == false)
return;

node.Parent.Checked = node.Checked;



原理:先递归到最底层节点,由checkChild()勾选上最底层节点,然后改变check状态,再checkParent()勾选最底层的上一层节点,虽然触发勾选事件,但是check状态改变了,不能再向下勾选,只能向上递归,从而防止了死循环。

普通方式死循环原理:递归到最底层后,勾选上最底层,然后勾选最底层的上一层,但是会自动触发勾选事件,再次递归到最底层,因此造成死循环。
参考技术B 如果父结点已经选中了的话,可以直接通过数据库等方法枚举子结点为,若不需要显式的在TVW控件中表示这个选中的话,直接将这种操作视为子结点全选即可。
参考技术C 遍历父节点的所有子节点

以上是关于treeview 单击父节点事件的主要内容,如果未能解决你的问题,请参考以下文章

怎么让所有子节点被选中,父节点自动选中 TreeView

DELPHI TreeView,动态添加父节点,子节点

winform 中Treeview控件怎样选中父节点时子节点全部展开,选中其他父节点时原先展开的关闭

怎么让所有子节点被选中,父节点自动选中 TreeView

在TreeView中使用CheckBox

在TreeView中使用CheckBox