Материал из .Net Framework эксперт
Auto progress bar
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;
}
}
}