[编程]我也来绘图,模拟进度条的控件

  想在自己程序的启动部分做一个漂亮的过度效果么?是不是见到别人的程序中在启动时候一个特漂亮的进度条似的东西,很是舒畅啊?下面这个东西,就是这个功能了,支持一个onComplete事件,你可以附加事件上去啦,还支持自定义进度条颜色、边框色、背景色。里面都有详细的注释,相信不用再怎么说明原理了。

 

using System;
using System.Drawing;
using System.Windows.Forms;

namespace Yoker.Library.FormControl
{
    
/// <summary>
    
/// 说明:进度条模拟类
    
/// 作者:Yoker.Wu
    
/// 原创地址:http://yoker.cnblogs.com/
    
/// </summary>

    public partial class ProgressBar : Control
    
{

        
组件设计器生成的代码

        
public ProgressBar()
        
{
            InitializeComponent();
        }


        
重新覆盖父类的宽、高度

        
进度条相关参数

        
public delegate void CompleteHandler(object sender);
        
public event CompleteHandler onComplete;
        
/// <summary>
        
/// 开始演示运行
        
/// </summary>

        public void Start()
        
{
            
while (true)
            
{
                
if (width++ >= this.Width-5break;
                System.Threading.Thread.Sleep(
10);
            }

            onComplete(
this);
        }


        
protected override void OnPaint(PaintEventArgs pe)
        
{
            
base.OnPaint(pe);
            
//画外边框
            pe.Graphics.DrawRectangle((new Pen(this.BorderColor, 1)), 00this.Width - 1this.Height - 1);
            
//画内边距
            pe.Graphics.FillRectangle(new SolidBrush(this.BackgroundColor), 11this.Width - 2this.Height - 2);
            
//画进度条块
            pe.Graphics.FillRectangle(new SolidBrush(this.ProgressBarColor), 22, width, height);

        }

    }

}

 

要看效果么?使用下面的这个代码就可以啦。
 

using System;
using System.Windows.Forms;

namespace Yoker.Demo.ProgressBar
{
    
/// <summary>
    
/// 在进度条上单击,开始演示。完成后,进度条增加一个双击事件,关闭窗体
    
/// </summary>

    class Program
    
{
        
static void Main(string[] args)
        
{
            Form form 
= new Form();
            form.FormBorderStyle 
= FormBorderStyle.None;
            form.Width 
= 320;
            form.Height 
= 30;
            form.TopLevel 
= true;
            form.StartPosition 
= FormStartPosition.CenterScreen;

            Yoker.Library.FormControl.ProgressBar progressbar 
= new Yoker.Library.FormControl.ProgressBar();
            progressbar.Width 
= form.Width;
            progressbar.Height 
= form.Height;
            progressbar.ProgressBarColor 
= System.Drawing.Color.DarkGreen;

            progressbar.onComplete 
+= new Yoker.Library.FormControl.ProgressBar.CompleteHandler(progressbar_onComplete);
            progressbar.Click 
+= new EventHandler(progressbar_Click);

            form.Controls.Add(progressbar);

            form.ShowDialog();
        }


        
static void progressbar_onComplete(object sender)
        
{
            Yoker.Library.FormControl.ProgressBar progressbar 
= sender as Yoker.Library.FormControl.ProgressBar;
            progressbar.DoubleClick 
+= new EventHandler(form_DoubleClick);
        }


        
static void form_DoubleClick(object sender, EventArgs e)
        
{
            Application.Exit();
        }


        
static void progressbar_Click(object sender, EventArgs e)
        
{
            Yoker.Library.FormControl.ProgressBar progressbar 
= sender as Yoker.Library.FormControl.ProgressBar;
            progressbar.Start();
        }

    }

}

 

欢迎大家指正。

 

posted @ 2008-07-27 17:21  Yoker.Wu  阅读(2044)  评论(5编辑  收藏  举报