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);
                    }
                }
            }
    多思考,多创新,才是正道!
  • 相关阅读:
    【html】【21】高级篇--搜索框
    【html】【20】高级篇--轮播图[聚焦]
    【html】【19】高级篇--大事件时间轴
    【html】【18】高级篇--下拉列表[竖向手风琴]
    【html】【17】高级篇--loading加载
    【html】【16】高级篇--毛玻璃效果[模糊]
    【html】【15】特效篇--分页
    【html】【14】特效篇--侧边栏客服
    【mysql】【分组】后取每组的top2
    【html】【13】特效篇--下拉导航
  • 原文地址:https://www.cnblogs.com/shuang121/p/3103225.html
Copyright © 2011-2022 走看看