关键点1:当前节点选中时,所有子节点都选中,需要使用递归。
private void setSubNodeCheckState(TreeNode node)
{
foreach (TreeNode nd in node.Nodes)
{
nd.Checked = node.Checked;
setSubNodeCheckState(nd);
}
}
关键点2:当前节点未相中时,判断同级节点是否有选中的,否则清空父节点选中状态。
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
if ( e.Action != TreeViewAction.Unknown ) //只处理不是TreeViewAction.Unknown的情况
{
setSubNodeCheckState(e.Node);
for (TreeNode pd = e.Node.Parent; pd != null; pd = pd.Parent)
{
if (e.Node.Checked)
{
pd.Checked = true;