在C# 的Winform应用程序中,经常会用到树(TreeView)的操作。但此控件有个小缺点,就是失去焦点后,刚才选择的节点不能像刚选择时那样高亮,让用户看不清到底选择的是哪个节点。虽然网上有好多的关于这个的解决方案和代码,但都不太完美。经过作者的多次调试,终于得到完美的代码。

代码如下:

private void Init()
{
  // 失去焦点仍选择节点
  this.treeView1.HideSelection = false;
  // 设置节点的绘制方式(必须选择TreeViewDrawMode.OwnerDrawAll)
  this.treeView1.DrawMode = TreeViewDrawMode.OwnerDrawAll;
  // 绘制事件
  this.treeView1.DrawNode += TreeView1_DrawNode;
}


private void TreeView1_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
  if (e.State == TreeNodeStates.Selected)//状态判定
  {
    // 背景色(原本的背景色,蓝色)
    Color bgColor = Color.FromArgb(0, 120, 215);
    Brush brush = new SolidBrush(bgColor);
    e.Graphics.FillRectangle(brush, new Rectangle(e.Node.Bounds.Left, e.Node.Bounds.Top, e.Node.Bounds.Width, e.Node.Bounds.Height));//背景色为蓝色
    // 绘制文本为蓝底白字
    TextRenderer.DrawText(e.Graphics,
                          e.Node.Text,
                          e.Node.TreeView.Font,
                          new Rectangle(e.Node.Bounds.Left + 1, e.Node.Bounds.Top, e.Node.Bounds.Width, e.Node.Bounds.Height),
                          Color.White);
  }
  else
  {
    e.DrawDefault = true;
  }
}

然后,在窗体的构造函数中调用 Init()方法。

 public FormMain()
 {
   InitializeComponent();
   this.Init();
 }

运行的效果图

posted on 2020-06-29 22:44  随缘而处  阅读(1020)  评论(0编辑  收藏  举报