Как я могу программно щелкнуть TreeView TreeNode, чтобы он выделился в списке и запустил событие AfterSelect?
У меня есть элемент управления TreeView в приложении Winforms, и в основном цель состоит в том, чтобы отобразить форму, содержащую элемент управления TreeView, и я хочу отобразить форму с открытым узлом (easy - EnsureVisible) и выбран.
проблема, с которой я сталкиваюсь, заключается в том, что когда я устанавливаю свойство SelectedNode элемента управления TreeView, узел не выделяется, и событие AfterSelect не запускается, как я ожидал. Вещь AfterSelect легко кодируется, но отсутствие подсветка раздражает.
6 ответов
Это потому, что у TreeView нет фокуса? Установка свойства HideSelection TreeView в False изменяет поведение, которое вы видите?
после установки SelectedNode. Попробуйте выбрать treeView. Все равно сработало.
private void button1_Click(object sender, EventArgs e)
{
this.treeView1.SelectedNode = this.treeView1.Nodes[1];
this.treeView1.Select();
}
попробуйте сделать выделенный узел полужирным:
selectedNode.NodeFont = new System.Drawing.Font(
selectedNode.TreeView.Font,
selectedNode.TreeView.Font.Style | FontStyle.Bold);
// You need to append an emptry string to work around this bug:
// http://support.microsoft.com/kb/937215
selectedNode.Text += string.Empty;
, выделив, я предполагаю, что вы хотите сделать текст жирным. Это не так элегантно, как некоторые другие технологии на стороне клиента, но вы можете обработать изменяемый узел и сделать выбранный узел жирным с чем-то вроде
treeNode.Font = new Font(treeNode.Font, treeNode.Font.Style | treeNode.Bold);
хорошо, я задал вопрос немного скоро, я думаю. Нашел решение:
//clear background
RadTreeNodeCollection nodes = rtrvNetworkAll.Nodes;
foreach (RadTreeNode n in nodes)
{
this.ClearRecursive(n);
}
//search a node with the build in find function
foreach (RadTreeNode n in nodes)
{
this.FindRecursive(n);
}
// recursively move through the treeview nodes
private void FindRecursive(RadTreeNode treeNode)
{
foreach (RadTreeNode tn in treeNode.Nodes)
{
// if the text properties match, color the item
if (tn.Text == this.txtSearch.Text)
{
tn.BackColor = Color.Yellow;
}
FindRecursive(tn);
}
}
private void ClearRecursive(RadTreeNode treeNode)
{
foreach (RadTreeNode tn in treeNode.Nodes)
{
tn.BackColor = Color.White;
ClearRecursive(tn);
}
}
для меня проблема заключалась в том, что TreeView
элемент управления не обязательно имеет фокус, и поэтому выбранный узел не отображается как выделенный. Для меня работал следующий код:
treeView.Focus();
treeView.SelectedNode = myTreeNode;
я столкнулся с этой точной проблемой при реализации некоторых функций перетаскивания для TreeView
управление.