C# 取消选择的节点将保持选中状态

C# 取消选择的节点将保持选中状态,c#,treeview,C#,Treeview,我已为我的TreeView控件创建了自定义处理程序: public class TreeViewOnlyLeavesSelectable : TreeView { protected override void OnNodeMouseClick(TreeNodeMouseClickEventArgs e) { //base.OnNodeMouseClick(e); if (e.Node.Nodes.Count == 0) {

我已为我的TreeView控件创建了自定义处理程序:

public class TreeViewOnlyLeavesSelectable : TreeView
{
    protected override void OnNodeMouseClick(TreeNodeMouseClickEventArgs e)
    {
        //base.OnNodeMouseClick(e);
        if (e.Node.Nodes.Count == 0)
        {
            this.SelectedNode = null;
            this.Refresh();
            return;
        }
    }
}
问题是,它仍然选择非叶节点。我已经调试了它,它正确地执行if语句,但在应用程序中仍然选择了节点。我做错了什么?

根据您的代码(
e.Node.Nodes.Count==0
),您只希望选择非叶节点

protected override void OnAfterSelect(TreeViewEventArgs e)
{
    base.OnAfterSelect(e);
    if (e.Node.Nodes.Count != 0)
    {
        this.SelectedNode = null;
    }
}
根据您的描述(“它仍然选择非叶节点”),您只希望叶节点是可选择的

protected override void OnAfterSelect(TreeViewEventArgs e)
{
    base.OnAfterSelect(e);
    if (e.Node.Nodes.Count != 0)
    {
        this.SelectedNode = null;
    }
}

除此之外,请考虑重写<代码> OnEndoScult> /Cord>。当使用键盘而不是鼠标时,也可以使用

以下代码仅允许选择叶节点

protected override void OnAfterSelect(TreeViewEventArgs e)
{
    base.OnAfterSelect(e);
    if (e.Node.Nodes.Count != 0)
    {
        this.SelectedNode = null;
    }
}