zoukankan      html  css  js  c++  java
  • winform之自定义控件

    这样的一个控件 肯定得通过自定义控件来实现了

     public class ProcessLabel : Control
        {
    
            public ProcessLabel()
            {
    
                //InitializeComponent();
                this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.UserPaint, true);
    
            }
    
            private int distance = 16;
    
            public int Distance
            {
                get { return distance; }
                set
                {
                    distance = value;
                    Invalidate();
                }
            }
    
            private ImageList imagelist = new ImageList();
    
            public ImageList ImageList
            {
                get { return imagelist; }
                set
                {
                    imagelist = value;
                    Invalidate();
                }
            }
    
            private List<KeyValuePair<string, string>> links = new List<KeyValuePair<string, string>>();
    
            public List<KeyValuePair<string, string>> Links
            {
                get { return links; }
                set
                {
                    links = value;
                    Invalidate();
                }
            }
    
            protected override void OnPaint(PaintEventArgs pe)
            {
                base.OnPaint(pe);
                Font enFont = new Font("新宋体", 10, FontStyle.Bold);
                Rectangle rect = pe.ClipRectangle;
                Graphics g = pe.Graphics;
                float x = 4;
                float y = 4;
                float x1 = 0;
                float y1 = 0;
                float x2 = 0;
                float y2 = 0;
                int index = 0;
                if (Links.Count > 0)
                {
                    foreach (KeyValuePair<string, string> kv in Links)
                    {
                        g.DrawString(kv.Key, enFont, new SolidBrush(Color.DodgerBlue), x, y);
                        SizeF sf = g.MeasureString(kv.Key, enFont);
                        x += (sf.Width + distance);
                        if (imagelist.Images.Count > 0)
                        {
                            Pen blackPenLeft;
                            Pen blackPenRight;
                            if (!string.IsNullOrEmpty(kv.Value))
                            {
                                x1 = x - distance - sf.Width / 2 - imagelist.Images[0].Width / 2;
                                y1 = sf.Height;
                                g.DrawImage(imagelist.Images[0], x1, y1);
                                blackPenLeft = new Pen(Color.Orange, 2);
                                x2 = x1 - 12;
                                y2 = y1 + imagelist.Images[0].Height;
                                g.DrawString(kv.Value, enFont, new SolidBrush(Color.DodgerBlue), x2, y2);
                            }
                            else
                            {
                                x1 = x - distance - sf.Width / 2 - imagelist.Images[1].Width / 2;
                                y1 = sf.Height;
                                g.DrawImage(imagelist.Images[1], x1, y1);
                                blackPenLeft = new Pen(Color.Black, 2);
                            }
                            if (index + 1 < Links.Count && !string.IsNullOrEmpty(Links[index + 1].Value))
                            {
                                blackPenRight = new Pen(Color.Orange, 2);
                            }
                            else
                            {
                                blackPenRight = new Pen(Color.Black, 2);
                            }
                            if (index == 0)
                            {
                                g.DrawLine(blackPenRight, x1 + imagelist.Images[0].Width, y1 + imagelist.Images[0].Height / 2, x1 + imagelist.Images[0].Width / 2 + sf.Width / 2 + distance / 2, y1 + imagelist.Images[0].Height / 2);
                            }
                            else if (index == Links.Count - 1)
                            {
                                g.DrawLine(blackPenLeft, x1 - 2, y1 + imagelist.Images[0].Height / 2, x1 - sf.Width / 2 - distance / 2, y1 + imagelist.Images[0].Height / 2);
                            }
                            else
                            {
                                g.DrawLine(blackPenRight, x1 + imagelist.Images[0].Width, y1 + imagelist.Images[0].Height / 2, x1 + imagelist.Images[0].Width / 2 + sf.Width / 2 + distance / 2, y1 + imagelist.Images[0].Height / 2);
                                g.DrawLine(blackPenLeft, x1 - 2, y1 + imagelist.Images[0].Height / 2, x1 - sf.Width / 2 - distance / 2, y1 + imagelist.Images[0].Height / 2);
                            }
                            index++;
                        }
                    }
                    if (x - distance + 4 < this.Parent.Width)
                    {
                        this.Width = this.Parent.Width;
                    }
                    else
                    {
                        this.Width = Convert.ToInt32(x - distance + 8);
                    }
                }
    
            }
    
        }

    使用

     ImageList myImageList = new ImageList();
                string filePath1 = Application.StartupPath + "\Images\orangelink.png";
                string filePath2 = Application.StartupPath + "\Images\blacklink.png";
                myImageList.Images.Add(Image.FromFile(filePath1));
                myImageList.Images.Add(Image.FromFile(filePath2));
                processLabel1.ImageList = myImageList;
    
                List<KeyValuePair<string, string>> source = new List<KeyValuePair<string, string>>();
                source.Add(new KeyValuePair<string,string>("下单","08:20"));
                source.Add(new KeyValuePair<string,string>("接单","14:20"));
                source.Add(new KeyValuePair<string,string>("配送","14:20"));
                source.Add(new KeyValuePair<string, string>("收货", "15:20"));
                source.Add(new KeyValuePair<string, string>("退货", "17:20"));
                source.Add(new KeyValuePair<string, string>("退款", "19:20"));
                source.Add(new KeyValuePair<string, string>("完毕", "21:20"));
              
                processLabel1.Links = source;
  • 相关阅读:
    Android WiFi系统【转】
    TCP服务器端和客户端程序设计【转】
    Ubuntu apt-get update 失败【转】
    AiCloud 2.0 AT开发文档【转】
    【转】简单几步让App Store软件下载快如迅雷 -- 不错!!!
    【转】Mac用户必备!100多款免费实用的苹果Mac软件大搜集
    【转】Mac QQ截图保存在哪里?
    【转】Xcode7.1环境下上架iOS App到AppStore 流程 (Part 三)
    【转】Xcode7.1环境下上架iOS App到AppStore 流程 (Part 二)
    【转】Xcode7.1环境下上架iOS App到AppStore 流程 (Part 一)
  • 原文地址:https://www.cnblogs.com/njcxwz/p/4720379.html
Copyright © 2011-2022 走看看