c#子节点全部选中,则父节点选中;子节点不全被选中,父节点不选中。
3个回答
展开全部
public partial class Form1 : Form
{
//直接新建一个Form,粘贴代码,运行看效果
//注意不要双击,双击貌似有问题
TreeView tv = new TreeView();
public Form1()
{
InitializeComponent();
tv.AfterCheck += new TreeViewEventHandler(this.tv_AfterCheck);
}
private void Form1_Load(object sender, EventArgs e)
{
tv.CheckBoxes = true;
TreeNode root = new TreeNode("root");
TreeNode n1 = new TreeNode("n1");
root.Nodes.Add(n1);
TreeNode n2 = new TreeNode("n2");
root.Nodes.Add(n2);
tv.Nodes.Add(root);
Controls.Add(tv);
tv.ExpandAll();
}
private void tv_AfterCheck(object sender, TreeViewEventArgs e)
{
TreeNode n = e.Node;
tv.AfterCheck -= new TreeViewEventHandler(this.tv_AfterCheck);
foreach (TreeNode tn in n.Nodes)
tn.Checked = n.Checked;
if (n.Parent != null)
{
TreeNode p = n.Parent;
p.Checked = !p.Nodes.OfType<TreeNode>().Any<TreeNode>(tn => tn.Checked == false);
}
tv.AfterCheck += new TreeViewEventHandler(this.tv_AfterCheck);
}
}
2013-07-19
展开全部
最简单也是最笨的方法,递归判断是否有未选中,
1从当前变更节点为起始
2如果变更后为未选中,那么父节点、父父节点(递归判断)都为未选中
3如果为选中,则判断他父节点A下的所有子节点是否有未选中
4在3中没有未选中则将3中父节点A选中,再找刚节点A父节点B下所有子节点,重复3-4过程
5如果有未选中则跳出循环
1从当前变更节点为起始
2如果变更后为未选中,那么父节点、父父节点(递归判断)都为未选中
3如果为选中,则判断他父节点A下的所有子节点是否有未选中
4在3中没有未选中则将3中父节点A选中,再找刚节点A父节点B下所有子节点,重复3-4过程
5如果有未选中则跳出循环
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个只能是循环去判断了,
这里有一点要注意,一个节点(除去根节点)有可能是父节点,也有可能是子节点,所有这两种情况都要去判断
当选中一个节点的时候,代码控制去吧他的子节点全部选上(如果没有就不选),
然后获得该节点的父节点,这里需要用到递归了,
判断这个父节点的子节点是否全部选中,是,则父节点选中,否,则不管;不要着急,当这个父节点选中后,你还去去判断这个父节点的父节点下的子节点是否全部选中,就这样,一层层递归,直到节点时根节点
这里有一点要注意,一个节点(除去根节点)有可能是父节点,也有可能是子节点,所有这两种情况都要去判断
当选中一个节点的时候,代码控制去吧他的子节点全部选上(如果没有就不选),
然后获得该节点的父节点,这里需要用到递归了,
判断这个父节点的子节点是否全部选中,是,则父节点选中,否,则不管;不要着急,当这个父节点选中后,你还去去判断这个父节点的父节点下的子节点是否全部选中,就这样,一层层递归,直到节点时根节点
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询