WinForms TreeView – 如何手动“突出显示”节点(就像点击它一样)

我需要知道如何让编程选择的节点以“选中”状态以图形方式进行,就像用户点击它一样。 SelectedNode仅在内部选择此选项。 非常感谢你!

它没有显示为突出显示的原因是由于树视图没有焦点。 这是我的测试表单上的按钮点击事件:

TreeView1.SelectedNode = TreeView1.Nodes(2); TreeView1.Focus(); 

这正确地突出了节点。 如果删除Focus(); 在您单击树视图(树视图中的任何位置,不一定是您要选择的节点)之前调用它不会突出显示。

这适用于.net 3.5:将treeview组件的DrawMode属性设置为: OwnerDrawAll然后在DrawNode事件中写入以下内容:

  if (((e.State & TreeNodeStates.Selected) != 0) && (!MyTreeView.Focused)) e.Node.ForeColor = Color.Blue; else e.DrawDefault = true; 

BeforeSelect活动中有:

 if (MyTreeView.SelectedNode != null) MyTreeView.SelectedNode.ForeColor = Color.Black; e.Node.ForeColor = Color.Blue; 
 TreeView1.SelectedNode.BackColor = SystemColors.HighlightText; // This will work 

以上解决方案仅关注它,但不会改变它的高亮视图。

我不知道它是否有帮助,但检查页面的taborder并确保树视图控件的Tab键顺序为0

底层的Win32控件支持这个(认为它是TVIS_DROPHILITED ),但我看不到通过TreeView控件公开的相同function。

正如theraneman所说,你可以使用TreeNode.ForeColorBackColor属性伪造它…

我遇到了类似的问题,并希望在表单加载时选择(突出显示) TreeView节点。 也许有人也有同样的问题。

我首先尝试了Pondidum的解决方案。 没有成功。 但后来我在另一个线程中找到了解决方案:只需将TreeViewTabIndex设置为0.在这种情况下, 您无需设置焦点 。 只需选择应使用SelectedNode选择的节点并设置TabIndex 。 而已。

这是我的工作:

 void myProcedure() { // Hookup a DrawMode Event Handler this.myTV.DrawNode += myTV_DrawNode; // Set DrawMode and HideSelection this.myTV.DrawMode = TreeViewDrawMode.OwnerDrawText; this.myTV.HideSelection = false; // Make sure the TreeView has Focus this.myTV.Focus(); // Make sure the TreeView is Selected this.myTV.Select(); // If the TreeView has a Node, I want to select the first Node to demonstrate. if (this.myTV.Nodes.Count > 0) { // Make sure the node is visible this.myTV.Nodes[0].EnsureVisible(); // Make sure the Node is Selected this.myTV.SelectedNode = myTV.Nodes[0]; } // Make sure the SelectedNode IS the Node that we programmatically want to select. textBox1.Text = this.myTV.SelectedNode.Text; // if we display sanityCheck1 string, it actually is the correct node.text // Make sure .NET runtime knows the Node is selected textBox1.Text += " is Selected = " + this.myTV.SelectedNode.IsSelected.ToString(); } 

跟进: laalto回答了HowView HighLight TreeView.Node。 来自samball的答案的DrawNode事件处理程序中的以下代码根据其Selected State正确地突出显示TreeView.Node。

 private void myTV_DrawNode(object sender, DrawTreeNodeEventArgs e) { // first, let .NET draw the Node with its defaults e.DrawDefault = true; // Now update the highlighting or not if (e.State == TreeNodeStates.Selected) { e.Node.BackColor = SystemColors.Highlight; e.Node.ForeColor = SystemColors.HighlightText; } else { e.Node.BackColor = ((TreeView)sender).BackColor; e.Node.ForeColor = ((TreeView)sender).ForeColor; } } 

平台= Windows 10中的C#.NET 4.5,Visual Studio 2015

不确定,但是你不能改变那个节点的背景颜色吗?