Как я могу программно щелкнуть 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 управление.