C# 如何以编程方式单击TreeView树节点,使其在列表中突出显示并触发AfterSelect事件?

C# 如何以编程方式单击TreeView树节点,使其在列表中突出显示并触发AfterSelect事件?,c#,winforms,treeview,C#,Winforms,Treeview,我在Winforms应用程序中有一个TreeView控件,基本上目标是显示一个包含TreeView控件的表单,并且我希望显示一个打开(易于确保)并选中的节点的表单 我遇到的问题是,当我设置TreeView控件的SelectedNode属性时,该节点没有高亮显示,并且AfterSelect事件没有像我预期的那样触发。AfterSelect很容易编码,但是缺少突出显示是令人讨厌的 设置所选节点后。尝试选择树视图。反正是为我工作的 private void button1_Click(object s

我在Winforms应用程序中有一个TreeView控件,基本上目标是显示一个包含TreeView控件的表单,并且我希望显示一个打开(易于确保)并选中的节点的表单


我遇到的问题是,当我设置TreeView控件的SelectedNode属性时,该节点没有高亮显示,并且AfterSelect事件没有像我预期的那样触发。AfterSelect很容易编码,但是缺少突出显示是令人讨厌的

设置所选节点后。尝试选择树视图。反正是为我工作的

private void button1_Click(object sender, EventArgs e)
{
this.treeView1.SelectedNode = this.treeView1.Nodes[1];
this.treeView1.Select();
}

是因为树视图没有焦点吗?将TreeView的HideSelection属性设置为False是否会更改您看到的行为?

通过高亮显示,我假设您的意思是将文本加粗。它不像其他一些客户端技术那样优雅,但您可以处理正在更改的节点,并使用以下命令将所选节点加粗:

treeNode.Font = new Font(treeNode.Font, treeNode.Font.Style | treeNode.Bold);

请尝试将选定节点设置为粗体:

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;

好吧,我问了一点问题,我想很快会的。 找到了一个解决方案:

//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
控件实现一些拖放功能时遇到了这个问题。

通过编程实现这一点(我发现)最简单的方法是伪造click事件。我需要这样做,就像我使用TreeView.Nodes.Find()搜索节点时一样,我需要它在向下的过程中单击层次结构的每个级别。所以我基本上做了以下几点:

tvMyTreeView_NodeMouseClick(tvMyTreeView, new TreeNodeMouseClickEventArgs(myNode, MouseButtons.Left, 1, 0, 0));
它触发了我的事件并假装左键单击myNode。在该事件中,您可以格式化e.Node,但您需要将其着色。希望这有帮助。

this.treeView1.Select()对我没有影响。不过,将HideSelection设置为false成功了。