如何禁用TreeView自动第一个节点选择

时间:2012-07-03 12:28:29

标签: c# .net treeview

我搜索了一下谷歌,但我找不到有用的东西。 TreeView的行为就像向树的节点添加节点一样,默认情况下会选择它,这意味着除了树空的时刻外,你应该总是有一个选定的节点。

有没有办法覆盖或禁用它?

5 个答案:

答案 0 :(得分:3)

使用更高的tabindex值 - 即,一旦表单加载第一个tabstop,就不应该是TreeView控件。

TreeView1.TabIndex = 2; 

或你也可以使用

TreeView1.TabStop = false;

答案 1 :(得分:1)

您可以尝试使用此代码

yourNode.SelectAction=TreeNodeSelectAction.None

答案 2 :(得分:0)

TreeView tv1 = new TreeView();  
TreeNode selected = tv1.SelectedNode;  
//do your add here  
tv1.SelectedNode = selected;

答案 3 :(得分:0)

哦,我刚才找到你,你想要没有选定的节点,对吧? 这很简单:

treeView1.SelectedNode = null;

答案 4 :(得分:0)

我知道这个问题很古老,但是我找到了比上面的方法更好的解决方案。 我通常不希望选择任何条目,除非用户选择了它。我发现,除了OP的情况外,当TreeView位于折叠面板中(由于某种原因)时,也会自动选择。

对我来说,解决方案是使用BeforeSelect事件。

private void GroupingTV_BeforeSelect(object sender, TreeViewCancelEventArgs e)
{
    // Prevent node selection by any other means than the user
    if (e.Action != TreeViewAction.ByMouse && e.Action != TreeViewAction.ByKeyboard)
    {
        e.Cancel = true;
    }

}

当然,如果您需要通过代码触发选择,则需要在触发选择之前用设置的额外标志来覆盖它:

Intentional = true;
GroupingTV.SelectedNode = node;
Intentional = false;
private void GroupingTV_BeforeSelect(object sender, TreeViewCancelEventArgs e)
{
    // Prevent node selection by any other means than the user and intentional calls via code.
    if (!Intentional && e.Action != TreeViewAction.ByMouse && e.Action != TreeViewAction.ByKeyboard)
    {
        e.Cancel = true;
    }

}

或者,如果您有很多树状视图并且不想拥有大量标志,请暂时禁用该处理程序:

GroupingTV.AfterSelect -= GroupingTV_BeforeSelect;
GroupingTV.SelectedNode = node;
GroupingTV_BeforeSelect += GroupingTV_BeforeSelect;

我希望这对某人有帮助!