WinForms TreeView - как вручную «выделить» узел (как он был нажат) - PullRequest
22 голосов
/ 03 декабря 2009

Мне нужно знать, как позволить графически выбранному узлу сделать графически в состоянии «выбрано», как пользователь щелкнул по нему. SelectedNode только делает это внутренне выбранным. Большое спасибо!

Ответы [ 9 ]

34 голосов
/ 03 декабря 2009

Причина, по которой он не отображается как выделенный, связана с тем, что древовидная структура не имеет фокуса. Это событие нажатия кнопки в моей тестовой форме:

TreeView1.SelectedNode = TreeView1.Nodes(2);
TreeView1.Focus();

Что правильно выделяет узел. если вы удалите вызов Focus();, он не будет выделен, пока вы не щелкнете в древовидном представлении (в любом месте древовидного представления, не обязательно на узле, который вы хотите выбрать).

2 голосов
/ 07 октября 2013
TreeView1.SelectedNode.BackColor = SystemColors.HighlightText; // This will work

Вышеуказанные решения будут только фокусироваться на нем, но не будут изменять его подсветку.

2 голосов
/ 28 февраля 2011

Это работает для меня для .net 3.5: Установите для свойства DrawMode компонента дерева видение: OwnerDrawAll Затем в событии DrawNode напишите следующее:

 if (((e.State & TreeNodeStates.Selected) != 0) && (!MyTreeView.Focused))
     e.Node.ForeColor = Color.Blue;
else
     e.DrawDefault = true;

А в событии BeforeSelect есть:

if (MyTreeView.SelectedNode != null)
    MyTreeView.SelectedNode.ForeColor = Color.Black;
e.Node.ForeColor = Color.Blue;
1 голос
/ 09 ноября 2011

Я не знаю, помогает ли это вам или нет, но проверьте вкладку страницы и убедитесь, что древовидный элемент управления имеет порядок вкладок 0

0 голосов
/ 23 апреля 2019
TreeView1.SelectedNode = TreeView1.Nodes(2);
this.ActiveControl = TreeView1;

Это работает для меня (.net 4.7)

0 голосов
/ 02 марта 2016

Вот что я получил на работу:

void myProcedure()
{
  // Hookup a DrawMode Event Handler
  this.myTV.DrawNode += myTV_DrawNode;
  // Set DrawMode and HideSelection
  this.myTV.DrawMode = TreeViewDrawMode.OwnerDrawText;
  this.myTV.HideSelection = false;

  // Make sure the TreeView has Focus
  this.myTV.Focus();
  // Make sure the TreeView is Selected
  this.myTV.Select();
  // If the TreeView has a Node, I want to select the first Node to demonstrate.
  if (this.myTV.Nodes.Count > 0)
  {
    // Make sure the node is visible
    this.myTV.Nodes[0].EnsureVisible();
    // Make sure the Node is Selected
    this.myTV.SelectedNode = myTV.Nodes[0];
  }
  // Make sure the SelectedNode IS the Node that we programmatically want to select.
  textBox1.Text = this.myTV.SelectedNode.Text;
  // if we display sanityCheck1 string, it actually is the correct node.text
  // Make sure .NET runtime knows the Node is selected
  textBox1.Text += "  is Selected = " + this.myTV.SelectedNode.IsSelected.ToString();
}

В продолжение: laalto ответил на вопрос Как выделить TreeView.Node. Следующий код в обработчике событий DrawNode из ответа samball правильно выделяет TreeView.Node в зависимости от его выбранного состояния.

private void myTV_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
  // first, let .NET draw the Node with its defaults
  e.DrawDefault = true;
  // Now update the highlighting or not
  if (e.State == TreeNodeStates.Selected)
  {
    e.Node.BackColor = SystemColors.Highlight;
    e.Node.ForeColor = SystemColors.HighlightText;
  }
  else
  {
    e.Node.BackColor = ((TreeView)sender).BackColor;
    e.Node.ForeColor = ((TreeView)sender).ForeColor;
  }
}

Платформа = C # .NET 4.5 в Windows 10, Visual Studio 2015

0 голосов
/ 07 июня 2012

У меня была похожая проблема, и я хотел выбрать узел TreeView (выделенный) при загрузке формы . Может быть, у кого-то тоже такая же проблема.

Я впервые попробовал решение Pondidum. Безуспешно. Но потом я нашел решение в другом потоке: просто установите TabIndex из TreeView в 0. В этом случае вам не нужно устанавливать фокус . Просто выберите узел, который должен быть выбран с помощью SelectedNode и установите TabIndex. Вот и все.

0 голосов
/ 03 декабря 2009

Базовый элемент управления Win32 поддерживает это (кажется, что TVIS_DROPHILITED), но я не вижу той же функциональности, предоставляемой через элемент управления TreeView.

Как говорит theraneman, вы можете подделать его со свойствами TreeNode.ForeColor и BackColor ...

0 голосов
/ 03 декабря 2009

Не уверен, но нельзя ли изменить цвет фона этого узла?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...