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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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控件暴露的相同功能。

正如theraneman所说,你可以用TreeNode.ForeColorBackColor属性假装它......

另一答案

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

我首先尝试了Pondidum的解决方案。没有成功。但后来我在另一个线程中找到了解决方案:只需将TabIndexTreeView设置为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回答了如何高亮的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

另一答案
TreeView1.SelectedNode = TreeView1.Nodes(2);
this.ActiveControl = TreeView1;

这对我有用(.net 4.7)

另一答案

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

以上是关于WinForms TreeView - 如何手动“突出显示”节点(就像点击它一样)的主要内容,如果未能解决你的问题,请参考以下文章

为啥 WinForms 中的 TreeView 会意外崩溃?

在 C# winforms 应用程序中使用文本框过滤 Treeview

Winforms treeview,递归检查子节点问题

带列的 TreeView

如何在wpf treeview控件上启用平滑滚动

WPF效果第二百零二篇之TreeView带连接线