TreeView
各位师傅们:
我想实现,点Treeview其中一个接点的CheckBox为True 时,那么它父接点的CheckBox也为True,
如果一个接点的的所有子接点的CheckBox都为Flase时,那么这个接点的CheckBox也为Flase。有具体的代码或例子没?再线等待!!!!《窗体》
问题点数:20、回复次数:6Top
1 楼MyLf(不睡觉的鱼)回复于 2005-12-05 13:07:20 得分 20
活用递归和循环就可以了。
private bool blJmp = false;
//TreeView的事件
private void trvFun_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
if(this.blJmp)return;
foreach(TreeNode tn in e.Node.Nodes)
{
tn.Checked = e.Node.Checked;
}
this.blJmp = true;
this.SetCheck(e.Node);
this.blJmp = false;
}
//下面的都是辅助函数
private void SetCheck(TreeNode n)
{
if(n.Checked)
{
this.parentNode(n,n.Checked);
}
else
{
if(n.Parent != null)
{
//如果同一级中没有被选中,则其父级也同时设为不选中,在这种情况下,递归父节点
if(this.nextNotCheck(n.Parent.FirstNode))
{
n.Parent.Checked = false;
this.SetCheck(n.Parent);
}
}
}
}
private void parentNode(TreeNode n,bool check)
{
if(n.Parent != null)
{
n.Parent.Checked = check;
this.parentNode(n.Parent,check);
}
}
//下一个节点是不是没有选中
private bool nextNotCheck(TreeNode n)
{
if(n.Checked) return false;
if(n.NextNode == null) return true;
return this.nextNotCheck(n.NextNode);
}Top
2 楼szh1689(低手)回复于 2005-12-05 15:35:46 得分 0
楼上的大哥:
我按您的代码做是对的,但有一点缺点,该如何处理:
就是一个节点点击一次,那么事件能实现,如果再接着点击一次,那么它的事件就不能触发了,怎么处理?谢谢 我马上给您分Top
3 楼szh1689(低手)回复于 2005-12-05 16:11:38 得分 0
大哥们快帮帮忙吧!Top
4 楼MyLf(不睡觉的鱼)回复于 2005-12-05 16:30:45 得分 0
就是一个节点点击一次,那么事件能实现,如果再接着点击一次,那么它的事件就不能触发了
--------------------
我不明白你说的什么,什么再点击一次,什么事件不能触发?
这是我现在系统的代码,运行好好的,点n次都可以。 :-)Top
5 楼szh1689(低手)回复于 2005-12-05 16:46:53 得分 0
是这样的:假如点一个节点,它的CheckBox为真,那么接着再点一次CheckBox应该为假,而现在没反应Top
6 楼MyLf(不睡觉的鱼)回复于 2005-12-05 20:23:51 得分 0
嗯.我不知道你的代码是怎么样写的.
Top




