C# listview進度條顯示淺析
作者:tianhongmu
C# listview進度條顯示是如何實現(xiàn)的呢?C# listview進度條顯示具體的實現(xiàn)需要注意什么方面呢?那么本文就向你介紹這方面的內容。
C# listview進度條顯示是如何實現(xiàn)的呢?讓我們來看看具體的實現(xiàn)過程。
程序比較簡單,就是重載了listview的實現(xiàn),不過很實用!
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Windows.Forms;
- using System.Drawing;
- //C# listview進度條顯示
- namespace WindowsApplication1
- {
- class ListViewEx:System.Windows.Forms.ListView
- {
- public ListViewEx()
- {
- 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;
- }
- }
- //C# listview進度條顯示
- public int ProgressColumIndex
- {
- set
- {
- progressIndex = value;
- }
- get
- {
- return progressIndex;
- }
- }
- int progressIndex = -1;
- /// ﹤summary﹥
- /// 檢查是否可以轉化為一個浮點數(shù)
- /// ﹤/summary﹥
- 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)
- {
- //C# listview進度條顯示
- e.DrawDefault = true;
- base.OnDrawSubItem(e);
- }
- else
- {
- if (CheckIsFloat(e.Item.SubItems[e.ColumnIndex].Text))
- //判斷當前subitem文本是否可以轉為浮點數(shù)
- {
- 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;
- }
- }
- }
- }
C# listview進度條顯示的基本情況就向你介紹到這里,希望對你了解和學習C# listview進度條顯示有所幫助。
【編輯推薦】
責任編輯:仲衡
來源:
CSDN博客