采用contexMenu,不要使用TreeAfterCheck事件
private void CheckedParentNode(TreeNode SeleckNode)
{
if (SeleckNode.Parent != null)
{
int checkedcount = 0;
foreach (TreeNode subnode in SeleckNode.Parent.Nodes)
{
if (subnode.Checked)
{
checkedcount++;
}
}
SeleckNode.Parent.Checked=checkedcount>0?true:false;
CheckedParentNode(SeleckNode.Parent);
}
}
private void CheckSubNode(TreeNode SeleckNode)
{
foreach (TreeNode currentNode in SeleckNode.Nodes)
{
currentNode.Checked = SeleckNode.Checked;
CheckSubNode(currentNode);
}
}
private void SelectNode_OK_Cancel(TreeNode SelectNode,bool bolCheck)
{
if (SelectNode==null)
{
foreach (TreeNode node in treeView1.Nodes)
{
node.Checked = bolCheck;
CheckSubNode(node);
}
}
else
{
SelectNode.Checked = bolCheck;
CheckedParentNode(SelectNode);
CheckSubNode(SelectNode);
}
}
private void contextMenuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
switch (e.ClickedItem.Name)
{
case "mnuOK":
SelectNode_OK_Cancel(treeView1.SelectedNode,true);
break;
case "mnuCancel":
SelectNode_OK_Cancel(treeView1.SelectedNode,false);
break;
case "mnuFullOK":
SelectNode_OK_Cancel(null, true);
break;
case "mnuFullCancel":
SelectNode_OK_Cancel(null, false);
break;
default:
break;
}
UpdateMenuStatus();
}