You should use AfterCheck event and another help procedure, called recursively. Something like this:
private void tvwTest_AfterCheck(object sender, TreeViewEventArgs e)
{
checkNodes(e.Node);
}
private void checkNodes(TreeNode root)
{
foreach (TreeNode node in root.Nodes)
{
node.Checked = root.Checked;
checkNodes(node);
}
}