Форма 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;
}