Как я могу программно щелкнуть TreeView TreeNode, чтобы он выделился в списке и вызвал событие AfterSelect? - PullRequest
9 голосов
/ 08 мая 2009

У меня есть элемент управления TreeView в приложении Winforms, и в основном цель состоит в том, чтобы отобразить форму, содержащую элемент управления TreeView, и я хочу отобразить форму с открытым узлом (easy - EnsureVisible) и выбранным.

Проблема, с которой я сталкиваюсь, состоит в том, что, когда я устанавливаю свойство SelectedNode элемента управления TreeView, узел не подсвечивается, и событие AfterSelect не запускается, как я ожидал. Возможность AfterSelect легко программировать, но отсутствие выделения раздражает.

Ответы [ 6 ]

6 голосов
/ 08 мая 2009

Это потому, что TreeView не имеет фокуса? Меняет ли установка свойства HideSelection TreeView на False поведение, которое вы видите?

5 голосов
/ 08 мая 2009

После установки SelectedNode. Попробуйте выбрать treeView. Все равно у меня сработало.

private void button1_Click(object sender, EventArgs e)
{
this.treeView1.SelectedNode = this.treeView1.Nodes[1];
this.treeView1.Select();
}
4 голосов
/ 10 марта 2011

Попробуйте сделать выделенный узел жирным:

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;
0 голосов
/ 26 мая 2015

Для меня проблема заключалась в том, что элемент управления TreeView не обязательно имел фокус, и поэтому выбранный узел не отображался как выделенный. У меня работал следующий код:

treeView.Focus();
treeView.SelectedNode = myTreeNode;

Я столкнулся с этой проблемой при реализации некоторых функций перетаскивания для элемента управления TreeView.

0 голосов
/ 09 мая 2011

Хорошо, я чуть-чуть задал вопрос, наверное, скоро. Нашел решение:

//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);
       }
}    
0 голосов
/ 08 мая 2009

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

treeNode.Font = new Font(treeNode.Font, treeNode.Font.Style | treeNode.Bold);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...