Csharp/C Sharp/Components/Progress Bar
Auto progress bar
<source lang="csharp"> using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; public class Form1 : Form {
AutoProgress status = new AutoProgress(); public Form1() { this.status = new AutoProgress(); this.SuspendLayout(); // // status // this.status.Location = new System.Drawing.Point(12, 8); this.status.Name = "status"; this.status.Size = new System.Drawing.Size(600, 20); // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 14); this.ClientSize = new System.Drawing.Size(292, 194); this.Controls.Add(this.status); this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.Name = "Form1"; this.Text = "Progress Host"; this.ResumeLayout(false); status.Start(); } [STAThread] static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); }
}
public class AutoProgress : System.Windows.Forms.UserControl { internal System.Windows.Forms.ProgressBar myProgressBar; internal Timer myTimer; private int percentPerSecond = 5; public AutoProgress() { this.myProgressBar = new System.Windows.Forms.ProgressBar(); this.myTimer = new System.Windows.Forms.Timer(new System.ruponentModel.Container()); this.SuspendLayout(); this.myProgressBar.Dock = System.Windows.Forms.DockStyle.Fill; this.myProgressBar.Location = new System.Drawing.Point(0, 0); this.myProgressBar.Name = "myProgressBar"; this.myProgressBar.Size = new System.Drawing.Size(164, 42); this.myProgressBar.TabIndex = 2; this.myTimer.Tick += new System.EventHandler(this.myTimer_Tick); this.Controls.Add(this.myProgressBar); this.Name = "AutoProgress"; this.Size = new System.Drawing.Size(164, 42); this.ResumeLayout(false); } public int PercentPerSecond { get { return percentPerSecond; } set { if (value < 0) { throw new ArgumentException("Progress cannot go backward."); } else if (value == 0) { throw new ArgumentException("Progress must go on."); } percentPerSecond = value; } } public void Start() { myProgressBar.Maximum = 200; myTimer.Interval = 100; decimal step = Math.Round((decimal)myProgressBar.Maximum * PercentPerSecond / 1000); myProgressBar.Step = (int)step; myProgressBar.Value = 0; myTimer.Start(); } public void Stop() { myTimer.Stop(); myProgressBar.Value = 0; } public void Finish() { myTimer.Stop(); myProgressBar.Value = myProgressBar.Maximum; } private void myTimer_Tick(object sender, EventArgs e) { myProgressBar.PerformStep(); if (myProgressBar.Value == myProgressBar.Maximum) { myProgressBar.Value = 0; } } }
</source>