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