/*
User Interfaces in C#: Windows Forms and Custom Controls
by Matthew MacDonald
Publisher: Apress
ISBN: 1590590457
*/
using System.Drawing;
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace ProgressBarHost
{
///
/// Summary description for ProgressBarHost.
///
public class ProgressBarHost : System.Windows.Forms.Form
{
internal System.Windows.Forms.Timer tmrIncrementBar;
private System.Windows.Forms.Button cmdStart;
private Progress status;
private System.ComponentModel.IContainer components;
public ProgressBarHost()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
}
///
/// Clean up any resources being used.
///
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.status = new Progress();
this.tmrIncrementBar = new System.Windows.Forms.Timer(this.components);
this.cmdStart = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// status
//
this.status.Location = new System.Drawing.Point(12, 8);
this.status.Name = "status";
this.status.Size = new System.Drawing.Size(272, 88);
this.status.TabIndex = 0;
//
// tmrIncrementBar
//
this.tmrIncrementBar.Interval = 1000;
this.tmrIncrementBar.Tick += new System.EventHandler(this.tmrIncrementBar_Tick);
//
// cmdStart
//
this.cmdStart.Location = new System.Drawing.Point(88, 152);
this.cmdStart.Name = "cmdStart";
this.cmdStart.Size = new System.Drawing.Size(92, 24);
this.cmdStart.TabIndex = 1;
this.cmdStart.Text = "Start";
this.cmdStart.Click += new System.EventHandler(this.cmdStart_Click);
//
// ProgressBarHost
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 14);
this.ClientSize = new System.Drawing.Size(292, 194);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.cmdStart,
this.status});
this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.Name = "ProgressBarHost";
this.Text = "ProgressBarHost";
this.ResumeLayout(false);
}
#endregion
///
/// The main entry point for the application.
///
[STAThread]
static void Main()
{
Application.Run(new ProgressBarHost());
}
private void tmrIncrementBar_Tick(object sender, System.EventArgs e)
{
status.PerformStep();
if (status.Maximum == status.Value)
{
tmrIncrementBar.Enabled = false;
}
}
private void cmdStart_Click(object sender, System.EventArgs e)
{
tmrIncrementBar.Enabled = false;
status.Value = 0;
status.Maximum = 20;
status.Step = 1;
tmrIncrementBar.Enabled = true;
}
}
///
/// Summary description for Progress.
///
public class Progress : System.Windows.Forms.UserControl
{
internal System.Windows.Forms.Label lblProgress;
internal System.Windows.Forms.ProgressBar Bar;
///
/// Required designer variable.
///
private System.ComponentModel.Container components = null;
public Progress()
{
// This call is required by the Windows.Forms Form Designer.
InitializeComponent();
// TODO: Add any initialization after the InitForm call
}
///
/// Clean up any resources being used.
///
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Component Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
this.lblProgress = new System.Windows.Forms.Label();
this.Bar = new System.Windows.Forms.ProgressBar();
this.SuspendLayout();
//
// lblProgress
//
this.lblProgress.Anchor = ((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right);
this.lblProgress.Location = new System.Drawing.Point(5, 46);
this.lblProgress.Name = "lblProgress";
this.lblProgress.Size = new System.Drawing.Size(152, 16);
this.lblProgress.TabIndex = 3;
this.lblProgress.Text = "0% Done";
this.lblProgress.TextAlign = System.Drawing.ContentAlignment.TopCenter;
//
// Bar
//
this.Bar.Anchor = ((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right);
this.Bar.Location = new System.Drawing.Point(5, 6);
this.Bar.Name = "Bar";
this.Bar.Size = new System.Drawing.Size(154, 32);
this.Bar.TabIndex = 2;
//
// Progress
//
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.lblProgress,
this.Bar});
this.Name = "Progress";
this.Size = new System.Drawing.Size(164, 68);
this.ResumeLayout(false);
}
#endregion
[Description("The current value (between 0 and Maximum) which sets the position of the progress bar"),
Category("Behavior"), DefaultValue(0)]
public int Value
{
get
{
return Bar.Value;
}
set
{
Bar.Value = value;
UpdateLabel();
}
}
public int Maximum
{
get
{
return Bar.Maximum;
}
set
{
Bar.Maximum = value;
}
}
public int Step
{
get
{
return Bar.Step;
}
set
{
Bar.Step = value;
}
}
public void PerformStep()
{
Bar.PerformStep();
UpdateLabel();
}
private void UpdateLabel()
{
lblProgress.Text = (Math.Round((decimal)(Bar.Value * 100) /
Bar.Maximum)).ToString();
lblProgress.Text += "% Done";
}
}
}