C# 更改TreeNode背景色,但AfterSelect事件未按预期工作

C# 更改TreeNode背景色,但AfterSelect事件未按预期工作,c#,C#,在我的表格中,有一个列出个人信息的树状视图和一个列出个人信息的列表框。选择人员将刷新列表框,以显示适用的权限列表。特权可以编辑。编辑后,当用户在树中选择另一个人时,会显示一条消息“保存更改”,其中有3个按钮:是;不取消。calcel按钮用于将treeView返回到上一个状态,即上一个选中的人和用户单击的人-未选中的人 为了实现这一点,我尝试在treeView上使用两个事件处理程序:BeforeSelect和AfterSelect。代码片段如下所示。MyMessageBox是一个根据单击的按钮返回

在我的表格中,有一个列出个人信息的树状视图和一个列出个人信息的列表框。选择人员将刷新列表框,以显示适用的权限列表。特权可以编辑。编辑后,当用户在树中选择另一个人时,会显示一条消息“保存更改”,其中有3个按钮:是;不取消。calcel按钮用于将treeView返回到上一个状态,即上一个选中的人和用户单击的人-未选中的人

为了实现这一点,我尝试在treeView上使用两个事件处理程序:BeforeSelect和AfterSelect。代码片段如下所示。MyMessageBox是一个根据单击的按钮返回枚举值的类

private void TreeView_BeforeSelect(object sender, TreeViewCancelEventArgs e)
    {
        if (saveButton.Enabled)
        {
            MyMessageBoxResults result = MyMessageBox.display("Save changes?", MessageBoxType.YesNoCancel);
            if (result == MyMessageBoxResults.Yes)
            {
                saveChanges();
            }
            else if (result == MyMessageBoxResults.Cancel)
            {
                TreeNode temp1 = TreeView.SelectedNode;         //for debug purposes
                temp1.BackColor = Color.DodgerBlue;
                temp1.ForeColor = Color.White;
            }
            else     //result == MyMessageBoxResults.No
            {

            }
        }
    }

private void TreeView_AfterSelect(object sender, TreeViewEventArgs e)
{
TreeNode temp2 = TreeView.SelectedNode;         //for debug purposes
temp2.BackColor = TreeView.BackColor;
}
结果是有两个节点高亮显示(即,用户显示为“已选定”)。当调试temp1和temp2节点按预期显示值时,TreeNode temp2的颜色显示为已更改,因此我希望它在TreeView中显示相同的值,但它是蓝色上的白色字母。(还有一些代码实际上选择了适当的节点,因此程序本身可以按预期工作,这只是视觉效果的问题)。
有什么想法吗?

我不清楚更改节点的前/后颜色如何有用。不要这样做,您需要在BeforeSelect事件处理程序中设置e.Cancel=true以防止选择。谢谢,我从未想过这一点,这正是我所需要的。就我而言,问题解决了。