zoukankan      html  css  js  c++  java
  • 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);
                    }
                }
            }
    多思考,多创新,才是正道!
  • 相关阅读:
    TCP协议报文段的解析
    在阿里云轻量级云服务器上安装redis
    MySQL学习(一)
    GIT学习(一)
    speed up gradle
    Android Studio plugins recommend
    Android Activity life circle brief
    install and use gradle
    Android Studio, Failed to install Intel HAXM
    Vue3 ref、reactive、toRef、toRefs的区别
  • 原文地址:https://www.cnblogs.com/shuang121/p/3103225.html
Copyright © 2011-2022 走看看