• 博客园Logo
  • 会员
  • 周边
  • 捐助
  • 新闻
  • 博问
  • 闪存
  • 赞助商
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 简洁模式 ... 退出登录
    注册 登录
wjshan0808

Learn from yesterday, Live for today, For a better tomorrow.
 ————wjshan0808

博客园    首页    新随笔    联系   管理    订阅  订阅

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; } }

 


posted @ 2015-04-27 09:59  wjshan0808  阅读(1311)  评论(0)  编辑  收藏  举报
会员力量,点亮园子希望
刷新页面返回顶部
Copyright © 2024 wjshan0808
Powered by .NET 8.0 on Kubernetes