您的位置:首页 > 其它

实现TreeView父子节点的联动

2014-08-06 10:46 337 查看
使用节点鼠标点击事件

private void ctrLayerTreeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
TreeNode node = e.Node;
this.ctrLayerTreeView.SelectedNode = node;
//递归设置父节点选中状态
SetParentNodeChecked(node);
//递归设置子节点选中状态
SetChildNodeChecked(node);
}

/// <summary>
/// 递归设置父节点选中状态
/// </summary>
/// <param name="ptreeNode">当前节点</param>
public void SetParentNodeChecked(TreeNode ptreeNode)
{
if (ptreeNode.Parent == null) return;
//递归设置父节点选中状态
if (!HasChildChecked(ptreeNode.Parent) && ptreeNode.Checked == false)
ptreeNode.Parent.Checked = false;
else
ptreeNode.Parent.Checked = true;
SetParentNodeChecked(ptreeNode.Parent);
        }

        /// <summary>
        /// 子节点是否有选中
        /// </summary>
        /// <param name="ptreeNode"></param>
        /// <returns></returns>
        private bool HasChildChecked(TreeNode ptreeNode)
        {
            foreach (TreeNode subNode in ptreeNode.Nodes)
            {
                if (subNode.Checked) return true;
            }
            return false;
        }

        /// <summary>
        /// 递归设置子节点选中状态
        /// </summary>
        /// <param name="ptreeNode">当前节点</param>
        public void SetChildNodeChecked(TreeNode ptreeNode)
        {
            foreach (TreeNode treeNode in ptreeNode.Nodes)
            {
                treeNode.Checked = ptreeNode.Checked;
                //递归设置子节点选中状态
                SetChildNodeChecked(treeNode);
            }
        }

http://blog.csdn.net/szstephenzhou/article/details/8739510
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  treeview 父子联动