试一下:
private void tvw_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
{

TreeNode currentnode=e.Node;
if(currentnode.Checked==true)
{
                    checktvw(currentnode);

}
else
{ foreach(TreeNode node1 in currentnode.Nodes)
{
node1.Checked=false; }
}
} //递归方法
private void checktvw(TreeNode node0)
{
foreach(TreeNode m in node0.Nodes)
{
m.Checked=true;
this.tvw.ExpandAll();
if(m.Nodes.Count>0 && m.Checked==true)
{
foreach(TreeNode n in m.Nodes)
{
checktvw(n);
}
}
} }