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);
                    }
                }
            }
    多思考,多创新,才是正道!
  • 相关阅读:
    设计模式之-装饰模式
    设计模式之-组合模式
    设计模式之-桥接模式
    设计模式之-适配器模式
    Java import static 静态导入
    C语言:字符数组 + 字符串指针
    leetcode 435.无重叠区间
    C++:强制类型转换
    C++:移动构造函数和移动赋值运算符
    编程:找出所有符合条件的元素
  • 原文地址:https://www.cnblogs.com/shuang121/p/3103225.html
Copyright © 2011-2022 走看看