树勾选
/// <summary> /// 树勾选 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tvCourse_AfterCheck(object sender, TreeViewEventArgs e) { if (e.Action ==TreeViewAction.ByMouse) { if (e.Node.Checked) { SetChildNode(e.Node, true); if (null!= e.Node.Parent) { SetParentNode(e.Node, true); } } else { //取消节点选中状态之后,取消所有父节点的选中状态 SetChildNode(e.Node, false); //如果节点存在父节点,取消父节点的选中状态 if (e.Node.Parent != null) { SetParentNode(e.Node, false); } } } } /// <summary> /// 设置父节点 /// </summary> /// <param name="node">当前节点</param> /// <param name="state">状态</param> private void SetParentNode(TreeNode node, bool state) { TreeNode pNode = node.Parent; if (null != pNode) { pNode.Checked = state; bool flag = false; foreach (TreeNode currNode in pNode.Nodes) { if (!currNode.Checked) //控制父节点全选,父节点选中去掉! { flag = false; pNode.Checked = flag; break; } //SetParentNode(item, state); } SetParentNode(pNode, flag); } } /// <summary> /// 设置子节点 /// </summary> /// <param name="node">当前节点</param> /// <param name="state">状态</param> private void SetChildNode(TreeNode node, bool state) { TreeNodeCollection tncNodes = node.Nodes; if (tncNodes.Count>0) { foreach (TreeNode currNode in tncNodes) { currNode.Checked = state; SetChildNode(currNode, state); } } }