我有一个树视图,有几个节点。如果我单击树的外部,我希望取消选择当前选定的节点。 但我找不到要触发的事件,如果我在空格中单击,则当前选定的节点保持选中状态
答案 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
,应避免LostFocus
和Enter
事件发生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;
}