C# WinForm TreeView改变选中节点颜色,失去焦点选中节点仍突显

绑定TreeView:

 /// <summary>加载职位列表</summary>
        private void LoadPostList()
        {
            this.tvwPost.Nodes.Clear();
            List<Post> lstPost = new Post().SelectList();
            TreeNode objTreeNode = new TreeNode();
            objTreeNode.Name = "0";
            objTreeNode.Text = "显示全部";
            foreach (Post obj in lstPost)
            {
                objTreeNode.Nodes.Add(obj.ID.ToString(), obj.Name);
            }
            this.tvwPost.Nodes.Add(objTreeNode);
            this.tvwPost.ExpandAll();
        }
View Code

当用户选中节点后,离开了,颜色虽然也显,但是,颜色太浅,几乎看不出来,这里重写一下DrawMode();可以控制选中节点颜色。
TreeView.HideSelection = False;可让选中节点保持高亮。

 private void Tc_Project_Load(object sender, EventArgs e)
        {
     
            LoadPostList();
            LoadDepositConfig();
            tvwPost.HideSelection = false;
            //自已绘制
            this.tvwPost.DrawMode = TreeViewDrawMode.OwnerDrawText;
            this.tvwPost.DrawNode += new DrawTreeNodeEventHandler(tvwPost_DrawNode);
        }

        void tvwPost_DrawNode(object sender, DrawTreeNodeEventArgs e)
        {
            e.DrawDefault = true; //我这里用默认颜色即可,只需要在TreeView失去焦点时选中节点仍然突显
            return;

            if((e.State & TreeNodeStates.Selected) != 0)
            {
                //演示为绿底白字
                e.Graphics.FillRectangle(Brushes.DarkBlue, e.Node.Bounds);

                Font nodeFont = e.Node.NodeFont;
                if (nodeFont == null) nodeFont = ((TreeView)sender).Font;
                e.Graphics.DrawString(e.Node.Text, nodeFont, Brushes.White, Rectangle.Inflate(e.Bounds, 2, 0));
            }
            else
            {
                e.DrawDefault = true;
            }

            if ((e.State & TreeNodeStates.Focused) != 0)
            {
                using (Pen focusPen = new Pen(Color.Black))
                {
                    focusPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
                    Rectangle focusBounds = e.Node.Bounds;
                    focusBounds.Size = new Size(focusBounds.Width - 1,
                    focusBounds.Height - 1);
                    e.Graphics.DrawRectangle(focusPen, focusBounds);
                }
            }
        }
多思考,多创新,才是正道!
原文地址:https://www.cnblogs.com/shuang121/p/3103225.html