程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#實現帶進度條的ListView

C#實現帶進度條的ListView

編輯:關於C語言

對於已經有的組件,可以直接添加進來,添加後要先運行一下,然後會在工具箱內找到相應控件。

1、首先編寫組件,然後將組件添加到工具箱內


編寫代碼如下:

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 public partial 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; } } 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; } } }

2、調用方法:

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 private void Form1_Load(object sender, EventArgs e) { ListVIEwItem lviUserName = new ListVIEwItem(); ListViewItem.ListVIEwSubItem lvsinc = new ListViewItem.ListVIEwSubItem(); ListViewItem.ListVIEwSubItem lvsihostname = new ListViewItem.ListVIEwSubItem(); ListViewItem.ListVIEwSubItem lvsiip = new ListViewItem.ListVIEwSubItem(); lviUserName.Text = "5"; lvsinc.Text = "4"; lvsihostname.Text = "3"; lvsiip.Text = "100"; lviUserName.SubItems.Add(lvsinc); lviUserName.SubItems.Add(lvsihostname); lviUserName.SubItems.Add(lvsiip); this.listVIEw1.Items.Add(lviUserName); this.listVIEw1.ProgressTextColor = Color.Red; this.listVIEw1.ProgressColor = Color.YellowGreen; } private void listVIEw1_DrawSubItem(object sender, DrawListVIEwSubItemEventArgs e) { //設置進度條的ColunIndex this.listVIEw1.ProgressColumIndex = 1; } private void timer1_Tick(object sender, EventArgs e) { if (Convert.ToInt32(listVIEw1.Items[0].SubItems[1].Text.ToString()) <= 100) { //進度條數字更新 listView1.Items[0].SubItems[1].Text = (Convert.ToInt32(listVIEw1.Items[0].SubItems[1].Text.ToString()) + 1).ToString(); } }

3、注意要添加Timer控件

4、運行結果如下所示


以上所述是基於C#實現帶進度條的ListVIEw ,希望對大家有所幫助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved