[编程]我也来绘图,模拟进度条的控件
想在自己程序的启动部分做一个漂亮的过度效果么?是不是见到别人的程序中在启动时候一个特漂亮的进度条似的东西,很是舒畅啊?下面这个东西,就是这个功能了,支持一个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-5) break;
System.Threading.Thread.Sleep(10);
}
onComplete(this);
}
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
//画外边框
pe.Graphics.DrawRectangle((new Pen(this.BorderColor, 1)), 0, 0, this.Width - 1, this.Height - 1);
//画内边距
pe.Graphics.FillRectangle(new SolidBrush(this.BackgroundColor), 1, 1, this.Width - 2, this.Height - 2);
//画进度条块
pe.Graphics.FillRectangle(new SolidBrush(this.ProgressBarColor), 2, 2, 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();
}
}
}
欢迎大家指正。




浙公网安备 33010602011771号