Windows窗体c# - TreeView:单击树外部时取消选择项

时间:2017-09-28 09:25:45

标签: c# winforms windows-forms-designer

我有一个树视图,有几个节点。如果我单击树的外部,我希望取消选择当前选定的节点。 但我找不到要触发的事件,如果我在空格中单击,则当前选定的节点保持选中状态

2 个答案:

答案 0 :(得分:1)

由于某些原因,<citation needed> MouseClick在点击TreeView控件的空白部分时无效。但Mouseown确实:

private void treeView1_MouseDown(object sender, MouseEventArgs e)
{
    var hit = treeView1.HitTest(e.X, e.Y);

    if (hit.Node == null)
    {
        treeView1.SelectedNode = null;
    }
}

如果您还希望在TreeView失去Focus时取消选择,您可以为合适的活动编码:

private void treeView1_Leave(object sender, EventArgs e)
{
    treeView1.SelectedNode = null;
} 

更新

根据MSDN GotFocus,应避免LostFocusEnter事件发生Leave

  

GotFocus和LostFocus事件是低级焦点事件   绑定到WM_KILLFOCUS和WM_SETFOCUS Windows消息。通常情况下,   GotFocus和LostFocus事件仅在更新UICues时使用   或者在编写自定义控件时。而是进入和离开事件   应该用于除Form类之外的所有控件,它使用的是   激活和停用事件。有关的更多信息   GotFocus和LostFocus事件,请参阅WM_KILLFOCUS和WM_KILLFOCUS   主题。

请注意,默认情况下HideSelection已启用,因此当TreeView失去焦点时,选择会被隐藏但仍然有效。

答案 1 :(得分:0)

在我给出答案之前,我只想告诉你,你应该证明你已经尝试过,并且至少给出一个例子来复制问题,在你的情况下,代码是在表单中添加树视图。这些都没有完成!无论如何,这是一个可能的解决方案。如果这对您不起作用,则意味着您必须玩弄事件并为您的案例选择最合适的事件

public Form1()
{
    InitializeComponent();

    treeView1.Nodes.Add("a");
    treeView1.Nodes.Add("b");
    treeView1.Nodes.Add("c");

    treeView1.LostFocus += (s, e) => ((TreeView)s).SelectedNode = null;
}