Open WinForms - Open Source Windows Forms and Controls

{} DailyCoding.com - Tips and tricks - C#, ASP.NET
 Subscribe in a reader

 
Home    Controls    Articles    Contact
  Vista style Progress bar (Vista Controls - I)
Download Source Code - vista_style_progress_bar.zip
 
 
Post comments    Need help?

Introduction

This is first article under the section of ?Windows Vista Control?. Vista is very cool in its look and feel. So, using vista style controls can improve the visual appearance of our application.

This article is about creating a vista style progress bar in .net winforms.
header panel outlook

This will support three themes Green, Red and Blue. However you can add as many as you want by modifying its source code.
header panel outlook

You can specify its progress value in float so that it gives you an accurate progress position.

Features

You can customize follwing things in Vista Progree bar
  • Theme Color
  • Progress Value

Source Code (Download here)

Source code for creating Extended header panel control.
public partial class VistaProgressBar : UserControl
{
  Color _border = Color.FromArgb(178, 178, 178);
  Color _backRemain1 = Color.FromArgb(202, 202, 202);
  Color _backRemain2 = Color.FromArgb(234, 234, 234);
  Color _backRemain3 = Color.FromArgb(219, 219, 219);
  Color _backRemain4 = Color.FromArgb(243, 243, 243);

  Color _backActive1 = Color.FromArgb(180, 0, 0);
  Color _backActive2 = Color.FromArgb(252, 0, 0);
  Color _backActive3 = Color.FromArgb(255, 127, 127);
  Color _backActive4 = Color.FromArgb(255, 205, 205);

  float _value = 50.0F;
  [Browsable(true)]
  public float Value
  {
    get { return _value; }
    set
    {
      if (_value > 100.0F) _value = 100.0F;
      if (_value < 1.0F) _value = 1.0F;
      _value = value;
      Invalidate();
    }
  }

  VistaProgressBarTheme _theme 
    = VistaProgressBarTheme.Default;
  [Browsable(true)]
  public VistaProgressBarTheme Theme
  {
    get { return _theme; }
    set
    {
      _theme = value;
      CalculateThems();
      Invalidate();
    }
  }

  public VistaProgressBar()
  {
    this.SetStyle(ControlStyles.DoubleBuffer, true);
    this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
    this.SetStyle(ControlStyles.ResizeRedraw, true);
    this.SetStyle(ControlStyles.UserPaint, true);
    this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
    InitializeComponent();
    this.BackColor = Color.Transparent;
    CalculateThems();
  }

  protected override void OnPaintBackground(PaintEventArgs e)
  {
    base.OnPaintBackground(e);

    Rectangle rectUpper = new Rectangle(0, 0, 
        this.Width, this.Height / 2 + 2);
    Rectangle rectLower = new Rectangle(0, this.Height / 2, 
        this.Width, this.Height - (this.Height / 2));

    GraphicsPath pathLower = OwfGraphics.GetRoundPath(rectLower, 2);
    GraphicsPath pathUpper = OwfGraphics.GetRoundPath(rectUpper, 2);

    using (Brush brushUpper = new LinearGradientBrush(rectUpper, 
        _backRemain4, _backRemain3, LinearGradientMode.Vertical))
    {
      e.Graphics.FillPath(brushUpper, pathUpper);
    }

    using (Brush brushLower = new LinearGradientBrush(rectLower, 
        _backRemain1, _backRemain2, LinearGradientMode.Vertical))
    {
      e.Graphics.FillPath(brushLower, pathLower);
    }
  }

  private void VistaProgressBar_Paint(object sender, 
        PaintEventArgs e)
  {
    float width = (((float)this.Width - 2) * _value) / 100.0F;

    Rectangle rectFull = new Rectangle(0, 0, this.Width - 1, 
        this.Height - 1);
    GraphicsPath pathFull = OwfGraphics.GetRoundPath(rectFull, 2);

    Rectangle rectUpper = new Rectangle(1, 1, (int)width, 
        this.Height / 2 + 1);
    GraphicsPath pathUpper = OwfGraphics.GetRoundPath(rectUpper, 1);

    Rectangle rectLower = new Rectangle(1, this.Height / 2, 
        (int)width, this.Height - (this.Height / 2) - 1);
    GraphicsPath pathLower = OwfGraphics.GetRoundPath(rectLower, 1);

    using (Brush brushUpper = new LinearGradientBrush(rectUpper, 
        _backActive4, _backActive3, LinearGradientMode.Vertical))
    {
      e.Graphics.FillPath(brushUpper, pathUpper);
    }

    using (Brush brushLower = new LinearGradientBrush(rectLower, 
        _backActive1, _backActive2, LinearGradientMode.Vertical))
    {
      e.Graphics.FillPath(brushLower, pathLower);
    }

    using (Pen pen = new Pen(_border))
    {
      e.Graphics.DrawPath(pen, pathFull);
    }
  }

  void CalculateThems()
  {
    switch (_theme)
    {
      case VistaProgressBarTheme.Red:
        _backActive1 = Color.FromArgb(180, 0, 0);
        _backActive2 = Color.FromArgb(252, 0, 0);
        _backActive3 = Color.FromArgb(255, 127, 127);
        _backActive4 = Color.FromArgb(255, 205, 205);
        break;

      case VistaProgressBarTheme.Default:
      case VistaProgressBarTheme.Green:
        _backActive1 = Color.FromArgb(12, 182, 20);
        _backActive2 = Color.FromArgb(55, 217, 60);
        _backActive3 = Color.FromArgb(117, 226, 119);
        _backActive4 = Color.FromArgb(171, 237, 171);
        break;

      case VistaProgressBarTheme.Blue:
        _backActive1 = Color.FromArgb(8, 49, 216);
        _backActive2 = Color.FromArgb(22, 106, 238);
        _backActive3 = Color.FromArgb(102, 171, 255);
        _backActive4 = Color.FromArgb(140, 192, 255);
        break;
    }
  }
}


Post comments    Need help?
Sponsors
 
  Tags: .NET, Outlook, Vista Controls, GDI+, GDI+ controls

Facing issue while using? contact sa@openwinforms.com
 
 

Contact Site Admin: sa@openwinforms.com