C# TreeView的CheckBox 父/子节点点击联动选择效果

注:
  点击时请正常速度点击,不然会出现“奇怪”现象!!!

/// <summary> /// 节点点击 子级->同级->父级 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tvRoles_AfterCheck(object sender, TreeViewEventArgs e) { if (e.Action != TreeViewAction.ByMouse) return; ChildrenChecked(e.Node, e.Node.Checked); ParentChecked(e.Node); } /// <summary> /// 把每一个父级当作子级 /// </summary> /// <param name="node"></param> /// <returns></returns> private void ParentChecked(TreeNode node) { if (node.Parent == null) return; ///单根 //if (node.PrevNode == null && node.NextNode == null) //{ // node.Parent.Checked = node.Checked; // return; //} ///多根 //当前节点两种状态 if (!node.Checked)//节点没被选中,父节点不被选中 { node.Parent.Checked = node.Checked; } else//节点被选中,同级节点决定父节点状态 { node.Parent.Checked = PeerChecked(node); } ParentChecked(node.Parent);//继续上级忽略同级 } private bool PeerChecked(TreeNode node) { if (node == null) return true; return PeerPrevNodeChecked(node.PrevNode) && PeerNextNodeChecked(node.NextNode); } private bool PeerNextNodeChecked(TreeNode node) { if (node == null) return true; return PeerNextNodeChecked(node.NextNode) & node.Checked; } private bool PeerPrevNodeChecked(TreeNode node) { if (node == null) return true; if (node.Checked) return PeerPrevNodeChecked(node.PrevNode); return false; } /// <summary> /// 把每一个子级当作父级 /// </summary> /// <param name="node"></param> /// <param name="check"></param> private void ChildrenChecked(TreeNode node, bool check) { foreach (TreeNode item in node.Nodes) { ChildrenChecked(item, check); item.Checked = check; } }

 

转载于:https://www.cnblogs.com/wjshan0808/p/4459246.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值