private void treeView1_AfterCheck(object sender, TreeViewEventArgs e) { if (e.Action != TreeViewAction.ByMouse) return; SetParentNode(e.Node); SetChildNode(e.Node); } private void SetParentNode(TreeNode node) { if (node.Level > 0) { node.Parent.Checked = true; SetParentNode(node.Parent); } } private void SetChildNode(TreeNode node) { foreach (TreeNode childNode in node.Nodes) { childNode.Checked = node.Checked; if (node.Nodes.Count > 0) SetChildNode(childNode); } }