我在谷歌上搜索了一下,但找不到有用的东西。TreeView 的行为就像当您将一个节点添加到它的树时,默认情况下它将被选中,这意味着您应该始终拥有一个选定的节点,除了 Tree 为空的时刻。
有没有办法覆盖或禁用它?
使用更高的tabindex 值——即一旦你的表单加载第一个tabstop 不应该是你的TreeView 控件。
TreeView1.TabIndex = 2;
或者你也可以使用
TreeView1.TabStop = false;
您可以尝试使用此代码
yourNode.SelectAction=TreeNodeSelectAction.None
;
哦,我刚刚得到你,你想没有选定的节点,对吧?
这很简单:
treeView1.SelectedNode = null;
TreeView tv1 = new TreeView();
TreeNode selected = tv1.SelectedNode;
//do your add here
tv1.SelectedNode = selected;
我知道这个问题很古老,但我找到了一个比上面更好的解决方案。除非用户选择它,否则我通常不希望选择任何条目。我发现除了 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;
我希望这可以帮助别人!