listview控件带进度条列代码

public partial class ListViewEx : System.Windows.Forms.ListView
    {
        public ListViewEx()
        {
            SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
            UpdateStyles();
            InitializeComponent();
        }


        //C# listview进度条显示
        private Color mProgressColor = Color.Red;
        public Color ProgressColor
        {
            get
            {
                return this.mProgressColor;
            }
            set
            {
                this.mProgressColor = value;
            }
        }
        private Color mProgressTextColor = Color.Black;
        public Color ProgressTextColor
        {
            get
            {
                return mProgressTextColor;
            }
            set
            {
                mProgressTextColor = value;
            }
        }
        public int ProgressColumIndex
        {
            set
            {
                progressIndex = value;
            }
            get
            {
                return progressIndex;
            }
        }
        int progressIndex = -1;
        const string numberstring = "0123456789.";
        private bool CheckIsFloat(String s)
        {
            //C# listview进度条显示
            foreach (char c in s)
            {
                if (numberstring.IndexOf(c) > -1)
                { continue; }
                else return false;
            }
            return true;
        }
        protected override void Dispose(bool disposing)
        {
            base.Dispose(disposing);
        }
        //C# listview进度条显示
        private void InitializeComponent()
        {
            this.OwnerDraw = true;
            //this.View = View.Details;
        }
        protected override void OnDrawColumnHeader(DrawListViewColumnHeaderEventArgs e)
        {
            e.DrawDefault = true;
            base.OnDrawColumnHeader(e);
        }
        protected override void OnDrawSubItem(DrawListViewSubItemEventArgs e)
        {
            if (e.ColumnIndex != this.progressIndex)
            {
                e.DrawDefault = true; base.OnDrawSubItem(e);
            }
            else
            {
                if (CheckIsFloat(e.Item.SubItems[e.ColumnIndex].Text))
                //判断当前subitem文本是否可以转为浮点数
                {
                    float per = float.Parse(e.Item.SubItems[e.ColumnIndex].Text);
                    if (per >= 1.0f) { per = per / 100.0f; }
                    Rectangle rect = new Rectangle(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height);
                    DrawProgress(rect, per, e.Graphics);
                }
            }
        }
        //C# listview进度条显示 ///绘制进度条列的subitem 
        private void DrawProgress(Rectangle rect, float percent, Graphics g)
        {
            if (rect.Height > 2 && rect.Width > 2)
            {
                if ((rect.Top > 0 && rect.Top < this.Height) && (rect.Left > this.Left && rect.Left < this.Width))
                {
                    //绘制进度 
                    int width = (int)(rect.Width * percent);
                    Rectangle newRect = new Rectangle(rect.Left + 1, rect.Top + 1, width - 2, rect.Height - 2);
                    using (Brush tmpb = new SolidBrush(this.mProgressColor))
                    { g.FillRectangle(tmpb, newRect); }
                    newRect = new Rectangle(rect.Left + 1, rect.Top + 1, rect.Width - 2, rect.Height - 2);
                    g.DrawRectangle(Pens.RoyalBlue, newRect);
                    StringFormat sf = new StringFormat();
                    sf.Alignment = StringAlignment.Center;
                    sf.LineAlignment = StringAlignment.Center;
                    sf.Trimming = StringTrimming.EllipsisCharacter;
                    newRect = new Rectangle(rect.Left + 1, rect.Top + 1, rect.Width - 2, rect.Height - 2);
                    using (Brush b = new SolidBrush(mProgressTextColor))
                    {
                        g.DrawString(percent.ToString("p1"), this.Font, b, newRect, sf);
                    }
                }
            }
            //C# listview进度条显示
            else
            {
                return;
            }
        }

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值