Форма Windows C# - TreeView: отмена выбора элемента при нажатии вне дерева

У меня есть дерево, с несколькими узлами. Если я нажму ВНЕШНЕЕ дерево, я хочу, чтобы текущий выбранный узел был отменен. Но я не могу найти событие для запуска, если я нажимаю в пустое пространство, текущий выбранный узел остается выбранным

2 ответа

По какой-то причине <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 являются низкоуровневыми событиями фокуса, которые связаны с сообщениями Windows WM_KILLFOCUS и WM_SETFOCUS. Как правило, события GotFocus и LostFocus используются только при обновлении UICues или при написании пользовательских элементов управления. Вместо этого события Enter и Leave должны использоваться для всех элементов управления, кроме класса Form, который использует события Activated и Deactivate. Для получения дополнительной информации о событиях GotFocus и LostFocus см. Разделы WM_KILLFOCUS и WM_KILLFOCUS.

Обратите внимание, что по умолчанию HideSelection включен, поэтому, когда TreeView теряет фокус, выделение скрыто, но все еще действует.

Прежде чем дать свой ответ, я просто хотел бы сказать вам, что вы должны продемонстрировать, что вы пытались, и хотя бы привести пример, чтобы повторить проблему, в вашем случае, код для добавления древовидного представления в форму. Ничего из этого не было сделано! В любом случае, вот одно из возможных решений. Если это не работает для вас, это означает, что вы должны поиграть с событиями и выбрать наиболее подходящий для вашего случая

public Form1()
{
    InitializeComponent();

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

    treeView1.LostFocus += (s, e) => ((TreeView)s).SelectedNode = null;
}
Другие вопросы по тегам