4

我在谷歌上搜索了一下,但找不到有用的东西。TreeView 的行为就像当您将一个节点添加到它的树时,默认情况下它将被选中,这意味着您应该始终拥有一个选定的节点,除了 Tree 为空的时刻。

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

4

5 回答 5

5

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

TreeView1.TabIndex = 2; 

或者你也可以使用

TreeView1.TabStop = false;
于 2014-05-14T22:23:29.940 回答
1

您可以尝试使用此代码

yourNode.SelectAction=TreeNodeSelectAction.None

;

于 2013-03-14T14:56:15.920 回答
0

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

treeView1.SelectedNode = null;
于 2012-07-04T05:22:43.570 回答
0
TreeView tv1 = new TreeView();  
TreeNode selected = tv1.SelectedNode;  
//do your add here  
tv1.SelectedNode = selected;
于 2012-07-03T14:49:53.390 回答
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;

我希望这可以帮助别人!

于 2020-05-27T09:32:39.207 回答