我搜索了一下谷歌,但我找不到有用的东西。 TreeView的行为就像向树的节点添加节点一样,默认情况下会选择它,这意味着除了树空的时刻外,你应该总是有一个选定的节点。
有没有办法覆盖或禁用它?
答案 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;
我希望这对某人有帮助!