取消选择的节点继续被选中

时间:2013-05-20 12:59:15

标签: c# treeview

我为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语句,但在应用程序中仍然选择节点。我做错了什么?

1 个答案:

答案 0 :(得分:2)

根据您的代码(e.Node.Nodes.Count == 0),您只需要选择NON-leaf节点。

根据你的描述(“它仍然选择非叶子节点”)你只想要叶子节点可选。

除此之外,请考虑改为覆盖OnAfterSelect。当使用键盘而不是鼠标时,这也有效。

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

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