У меня работает следующее. Обратите внимание, что я отменяю фактическое выделение, поскольку в противном случае выделение выделит мое выделение. Поэтому вам, возможно, придется отслеживать, какой узел выбран вручную.
private void treeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e)
{
Dehighlight(treeView1.Nodes);
e.Node.ForeColor = Color.Red;
e.Cancel = true;
}
private void Dehighlight(TreeNodeCollection nodes)
{
foreach (TreeNode node in nodes)
{
node.BackColor = Color.White;
node.ForeColor = Color.Black;
Dehighlight(node.Nodes);
}
}