C# 进度条窗口 有取消按按钮
来源:互联网 发布:悟空网络加速器官网 编辑:程序博客网 时间:2024/04/24 23:54
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Test
{
publicclass MyProgress
{
//by 闫磊 Email:Landgis@126.com,yanleigis@21cn.com 2007.10.30
privateint MaxNum;
Form progressForm=null;
ProgressBar progressBar1=null;
bool Stop=false;
Label label1;
publicbool ProgressStep(int step)
{
if (Stop)
{
this.Dispose();
returntrue;
}
if (progressBar1.Value > progressBar1.Maximum)
{
this.Dispose();
returntrue;
}
progressBar1.Value+= step;
label1.Text = "目前完成:" + (progressBar1.Value * 100 / progressBar1.Maximum) + "%";
Application.DoEvents();
returnfalse;
}
privatevoid btn_Click(object sender, EventArgs e)
{
if (MessageBox.Show("你确定终止吗", "终止", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) != DialogResult.Yes)
Stop = false;
else
Stop = true;
}
public MyProgress(int Max, String Caption, bool IsCancel)//最大值和标题
{
progressForm = newForm();
progressForm.MinimizeBox = false;
progressForm.MaximizeBox = false;
progressForm.StartPosition = FormStartPosition.CenterScreen;
progressForm.Width = 326+19;
progressForm.Height = 96+19+20;
progressForm.Text= Caption;
progressForm.TopMost = true;//设置窗口在上边
label1 = new Label();
label1.Left = 9;
label1.Top = 15;
label1.Parent = progressForm;
progressBar1 = new ProgressBar();
progressBar1.Maximum = Max;
MaxNum = Max;
progressBar1.Left = 9;
progressBar1.Top = 25+15;
progressBar1.Width = 310;
progressBar1.Parent = progressForm;
progressBar1.Value = 0;
if (IsCancel)
{
Button btnCancel = new Button();
btnCancel.Text = "取消";
btnCancel.Left = 240;
btnCancel.Top = 54+20;
btnCancel.Parent = progressForm;
btnCancel.Click += new System.EventHandler(this.btn_Click);
}
progressForm.Show();
}
publicvoid Dispose()
{
if (progressForm != null)
{
progressBar1.Dispose();
progressForm.Dispose();
}
}
}
}
----------------------------------
//调用测试 进度条窗口
privatevoid button2_Click(object sender, EventArgs e)
{
MyProgress myProgress = new MyProgress(100, "进度条", true);
try
{
for (int i = 0; i < 100; i++)
{
if (myProgress.ProgressStep(1)) return;
Application.DoEvents();//让系统在百忙中抽空刷新
Thread.Sleep(100);
}
}
finally
{
myProgress.Dispose();
}
}
//--------------------------------按高手的意思修改BackgroundWorker,如下
//使用BackgroundWorker异步进度条
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;//BackgroundWorker所在的
using System.Windows.Forms;
namespace Test
{
class MyNewProgress
{
private BackgroundWorker backgroundWorker = null;
//by 闫磊Email:Landgis@126.com,yanleigis@21cn.com 2007.10.31
privateint MaxNum;
Form progressForm = null;
ProgressBar progressBar1 = null;
Label label1;
privatevoid btn_Click(object sender, EventArgs e)
{
if (backgroundWorker.IsBusy)
{
if (MessageBox.Show("你确定终止吗", "终止", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
backgroundWorker.CancelAsync();
}
}
publicvoid OnProcessCompleted(object sender, EventArgs e)
{
Dispose();
}
publicvoid OnProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
label1.Text = "目前完成:" + (progressBar1.Value * 100 / progressBar1.Maximum) + "%";
}
privatevoid worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//return;
/*if (e.Cancelled)
{
MessageBox.Show("取消");
}
else if (e.Error != null)
{
MessageBox.Show("错误");
}
else
{
MessageBox.Show("完成");
}
*/
}
privatevoidForm_FormClosing(object sender, FormClosingEventArgs e) //处理窗口直接关闭事件
{
if (backgroundWorker.IsBusy)
{
if (MessageBox.Show("你确定终止吗", "终止", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
backgroundWorker.CancelAsync();
else
e.Cancel = true;
}
}
//把事件传进入
privatevoid SetbackgroundWorker(DoWorkEventHandler DoWork, ProgressChangedEventHandler worker_ProgressChanged)
{
backgroundWorker = new BackgroundWorker();
backgroundWorker.WorkerReportsProgress = true;//有进度条
backgroundWorker.WorkerSupportsCancellation = true;//是否支持异步取消
backgroundWorker.DoWork += new DoWorkEventHandler(DoWork);
backgroundWorker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);//做的事情
backgroundWorker.ProgressChanged += new ProgressChangedEventHandler(OnProgressChanged);//更新进度条
backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);//完成事件
backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(OnProcessCompleted);
backgroundWorker.RunWorkerAsync();
}
public MyNewProgress(int Max, String Caption, bool IsCancel, DoWorkEventHandler DoWork, ProgressChangedEventHandler worker_ProgressChanged)//最大值和标题
{
progressForm = newForm();
progressForm.MinimizeBox = false;
progressForm.MaximizeBox = false;
progressForm.StartPosition = FormStartPosition.CenterScreen;
progressForm.Width = 326 + 19;
progressForm.Height = 96 + 19 + 20;
progressForm.Text = Caption;
progressForm.TopMost = true;//设置窗口在上边
label1 = new Label();
label1.Left = 9;
label1.Top = 15;
label1.Parent = progressForm;
progressBar1 = new ProgressBar();
progressBar1.Maximum = Max;
MaxNum = Max;
progressBar1.Left = 9;
progressBar1.Top = 25 + 15;
progressBar1.Width = 310;
progressBar1.Parent = progressForm;
progressBar1.Value = 0;
if (IsCancel)
{
Button btnCancel = new Button();
btnCancel.Text = "取消";
btnCancel.Left = 240;
btnCancel.Top = 54 + 20;
btnCancel.Parent = progressForm;
btnCancel.Click += new System.EventHandler(this.btn_Click);
}
progressForm.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form_FormClosing);
progressForm.Show();
SetbackgroundWorker(DoWork, worker_ProgressChanged);
}
publicvoid Dispose()
{
if (progressForm != null)
{
progressBar1.Dispose();
progressForm.Dispose();
}
}
}
}
//测试方法,放一个按钮button和标签label1
privatevoid worker_DoWork(object sender, DoWorkEventArgs e)
{
DoNothing((BackgroundWorker)sender, e);
}
privatevoid DoNothing(BackgroundWorker worker, DoWorkEventArgs e)
{
//要做的事情,写在这里
int num = 100;
for (int i = 0; i <num; i++)
{
// Check for cancellation
if (worker.CancellationPending)
{
e.Cancel = true;
break;
}
else
{
worker.ReportProgress((i + 1) * (100 / num));
Thread.Sleep(100);
}
}
}
privatevoid worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
label1.Text = e.ProgressPercentage.ToString();
}
privatevoid button1_Click(object sender, EventArgs e)
{
MyNewProgress myProgress = new MyNewProgress(100, "进度条", true, worker_DoWork, worker_ProgressChanged);
}
- C# 进度条窗口 有取消按按钮
- C# 进度条窗口 有取消按按钮
- asp.net打造进度条窗口代码,还有取消按钮呢
- android 有进度条的下载按钮
- c# winform 取消右上角关闭按钮方法
- C# WinForm开发 取消窗体关闭按钮
- 将c#控制台程序关闭按钮取消
- C# 监听关闭窗口按钮
- C# WinForm 进度条可复用窗口设计
- 进度条代码,窗口启动进度条就在动作,我还没有点按钮呢
- C# 禁用 关闭窗口 按钮的方法
- C# 禁用 关闭窗口 按钮的方法
- C# 窗口最大化按钮可以消除吗
- c# 禁用Excel窗口关闭按钮
- C# winform 按钮弹出窗口的问题
- C# winform 窗口关闭按钮不显示
- C# 对 Win Form 窗口按钮禁用
- C# WinForm开发 取消窗体关闭按钮(整理)
- 探讨修复光盘的可能http://www.moon-soft.com/book/ttxfgpdkn.htm
- SQL SERVER 2005数据库镜像(上)
- 自动光盘修复机,拯救损坏的光盘http://hard.zol.com.cn/2004/0614/102449.shtml
- 如何修复有划痕的光盘http://www.hongen.com/pc/diy/problem/hard/cdrom/index2.htm
- SQL SERVER 2005数据库镜像(中)
- C# 进度条窗口 有取消按按钮
- SQL SERVER 2005数据库镜像(下)
- 使用STL的hash_map要点
- 手机射击游戏中弹幕的开发
- Struts处理请求的过程
- DLL封装
- linux-Tcp IP协议栈源码阅读笔记 (转)
- 什么是框架
- 周总理逝世录象(测试剪影)