zoukankan      html  css  js  c++  java
  • TreeView节点自定义绘制样式

    TreeView节点自定义绘制需要设置属性DrawMode属性为OwnerDrawAll;

     public LTreeNew()
            {
                // This call is required by the Windows.Forms Form Designer.
                ApplyNewUI.SetNewUI(this, InitializeComponent);
                
                // TODO: Add any initialization after the InitForm call
                //自已绘制  
                this.tree.DrawMode = TreeViewDrawMode.OwnerDrawAll;
                this.tree.DrawNode += new DrawTreeNodeEventHandler(tree1_DrawNode);
            }
            //在绘制节点事件中,按自已想的绘制  
            private void tree1_DrawNode(object sender, DrawTreeNodeEventArgs e)
            {
                TreeViewZJStyle.SetTreeNodeDraw(sender, e, imageCollectionTree, this.Width, 0, 0, 1);
    
            }  
    /// <summary>
            /// 调整TreeView 样式
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            /// <param name="imageList1">节点图片组件</param>
            /// <param name="Width">总宽度</param>
            /// <param name="ExpandImageIndex">展开图</param>
            /// <param name="CollapseImageIndex">收缩图</param>
            /// <param name="LeafImageIndex">叶子图</param>
            public static void SetTreeNodeDraw(object sender, DrawTreeNodeEventArgs e, ImageCollection imageList1, int Width, int ExpandImageIndex, int CollapseImageIndex, int LeafImageIndex)
            {
                TreeNode tn = e.Node as TreeNode;
                if (tn == null)
                {
                    return;
                }
                Point ptbigimage = new Point(tn.Bounds.X - 5, tn.Bounds.Y + 5);
                Point ptsmallimage = new Point(tn.Bounds.X-5, tn.Bounds.Y + 5);
                Size szbig = new Size(16, 16);//打开收缩图片
                Size szsmall = new Size(16, 16);//叶子图片
                //Rectangle bcimage = new Rectangle(ptimage, new Size(33, 23));
                //根据节点增加图片
                if (tn.IsExpanded)
                {
                    e.Graphics.DrawImage(imageList1.Images[ExpandImageIndex], new Rectangle(ptbigimage, szbig));
                }
                else if (tn.Nodes.Count > 0)
                {
                    e.Graphics.DrawImage(imageList1.Images[CollapseImageIndex], new Rectangle(ptbigimage, szbig));
                }
                else
                {
                    e.Graphics.DrawImage(imageList1.Images[LeafImageIndex], new Rectangle(ptsmallimage, szsmall));
                }
                //增加背景颜色
                Point pt = new Point(tn.Bounds.X + 11, tn.Bounds.Y);
                Brush bccolor = new SolidBrush(System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(229)))), ((int)(((byte)(242))))));
                Brush ybccolor = new SolidBrush(System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))));
                Rectangle bcrt = new Rectangle(pt, new Size(Width - e.Bounds.X, e.Bounds.Height));//使用Width充满整行
                if ((e.State & TreeNodeStates.Focused) != 0)
                {
                    e.Graphics.FillRectangle(bccolor, bcrt);
                }
                else
                {
                    e.Graphics.FillRectangle(ybccolor, bcrt);
                }
                //增加格线
                using (Pen focusPen = new Pen(System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(192)))), ((int)(((byte)(192)))))))
                {
                    focusPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid;
                    e.Graphics.DrawRectangle(focusPen, bcrt);
                }
                //设置文本颜色和字体
                Point ptft = new Point(tn.Bounds.X + 16, tn.Bounds.Y + 7);
                Rectangle rt = new Rectangle(ptft, new Size(e.Bounds.Width, e.Bounds.Height));
                Brush bfcolor = new SolidBrush(System.Drawing.Color.FromArgb(((int)(((byte)(59)))), ((int)(((byte)(59)))), ((int)(((byte)(59))))));
                Font nf = tn.NodeFont == null ? ((TreeView)sender).Font : tn.NodeFont;
                e.Graphics.DrawString(e.Node.Text, nf, bfcolor, Rectangle.Inflate(rt, 1, 4));
            }

    另外,ItemHeight属性调整节点显示高度;FullRowSelect和ShowLines属性设置选中整行。 

  • 相关阅读:
    技术汇总:第四章:使用Easyui做三级下拉列表
    全文检索工具elasticsearch:第四章:开发电商的搜索列表功能
    全文检索工具elasticsearch:第三章: Java程序中的应用
    技术汇总:第三章:拖拉验证
    分布式部署:第三章:Docker、MySQL、tomcat、Nginx、Redis部署
    分布式部署:第二章:MyCat和Nginx部署
    分布式部署:第一章:zookeeper集群和solrcloud及redisCluster集群搭建
    技术汇总:第二章:JUC
    大型电商网站:第四章:业务功能与数据结构分析
    大型电商网站:第二章:项目开发介绍
  • 原文地址:https://www.cnblogs.com/zhutao1015/p/7016355.html
Copyright © 2011-2022 走看看