谁有现成的进度条ProgressBar的例子,或者是哪里有下载的...........

wxm3630478 2009-05-20 03:37:17
谁有进度条的例子哟!

就像windows系统复制稍微大点文件时出现的那个进度提示窗体一样.....最好是能弹出一个窗体来的

有的就发出来吧 或者发到我的邮箱:bwang3630478@126.com

...全文
1232 47 打赏 收藏 转发到动态 举报
写回复
用AI写文章
47 条回复
切换为时间正序
请发表友善的回复…
发表回复
marttre 2012-05-17
  • 打赏
  • 举报
回复
楼主 我目前也是碰到这个问题 如何在单击事件进行计算的程序中显示计算的进度条 求指教
[Quote=引用楼主 的回复:]
谁有进度条的例子哟!

就像windows系统复制稍微大点文件时出现的那个进度提示窗体一样.....最好是能弹出一个窗体来的

有的就发出来吧 或者发到我的邮箱:bwang3630478@126.com
[/Quote]
wxm3630478 2009-05-22
  • 打赏
  • 举报
回复
没人看 算了 结贴了
wxm3630478 2009-05-22
  • 打赏
  • 举报
回复
搞了一两天 网上找来很多例子 终于搞出来一个简单的例子 给大家分享下

别人的 稍微改了下:

//主窗体
public partial class Form6 : Form
{
public Form6()
{
InitializeComponent();
}
delegate void dShowForm();
Form7 frm = null;
private void Form6_Load(object sender, EventArgs e)
{

}

//显示窗体
void ShowForm()
{
if (this.InvokeRequired)
{
this.Invoke(new dShowForm(this.ShowForm));
}
else
{
frm.ShowDialog(this);
}
}

//控制进度 ----------进度条显示快慢 在这里控制
void SetProgress()
{
for (int i = 1; i <= 50; i++)
{
if (frm.DialogResult == DialogResult.Cancel)
{
break;
}
else
{
//模拟进度
if (i % 2 == 0)
{
frm.SetProgress(50, i, "请稍候......");
}
else
{
frm.SetProgress(50, i, "请稍候...");
}
System.Threading.Thread.Sleep(50);
}

}
}

private void button1_Click_1(object sender, EventArgs e)
{
frm = new Form7();
new System.Threading.Thread(new System.Threading.ThreadStart(ShowForm)).Start();
new System.Threading.Thread(new System.Threading.ThreadStart(SetProgress)).Start();
}
}


进度窗体

public partial class Form7 : Form
{
public Form7()
{
InitializeComponent();
}

private void Form7_Load(object sender, EventArgs e)
{
}

public delegate void dSetProgress(int total, int current,string info);

public void SetProgress(int total, int current,string info)
{
if (this.InvokeRequired)
{
try
{
this.Invoke(new dSetProgress(this.SetProgress), new object[] { total, current,info });
}
catch { }
}
else
{
this.progressBar1.Maximum = total;
this.progressBar1.Value = current;
this.Text = info;
if (progressBar1.Maximum == progressBar1.Value)
{
this.Close();
}
}
}

//取消
private void button1_Click_1(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
}
}

/*希望对新手有点用.........................*/

wxm3630478 2009-05-21
  • 打赏
  • 举报
回复
为什么没人啊 ,在不顶哈又看不大了
ylwqhr 2009-05-21
  • 打赏
  • 举报
回复
up
wxm3630478 2009-05-21
  • 打赏
  • 举报
回复

/*帖子掉的好快哟 .......

我不想做一个假的进度条 就像 hecker728 哪里说的 能够实时更新 并且点击取消Button 能够结束当前任务的

不知道各位看懂了没

比如我查询一不数据量非常大的数据

当开始查询的时候 等待窗体ProgressForm出现 进度条在动 我看进度条动的太慢 我点击取消

点击取消后 关闭 等待窗体ProgressForm 同时也要结束查询

大侠们帮忙呢??????????????有例子更好,发的代码 我自己还要一个一个试啊......*/


netstray 2009-05-21
  • 打赏
  • 举报
回复
学习学习了哈
hecker728 2009-05-21
  • 打赏
  • 举报
回复

进度条是一个软件人性化考虑之一,他给用户的感觉就是程序内部在不停的动作,执行到了什么程度,而不是整个界面僵死,以至于用户不知道程序在做什么!

  看了好几个WinForm程序了,发现他们对进度条的处理完全失去了进度条的作用。他们都是采用Timer来处理,在线程结束的时候,直接赋值进度条达到100%。和我以前做WebForm程序的时候完全不一样,做WebForm程序的时候,进度条是根据总体数据和每步执行后而计算和更新的。在看了这几个WinForm程序后,我在想:是否所有WinForm程序,在进度条的处理上都不能保证实时进度显示?

  其实用Timer来处理,不停的更新进度条只是程序作者偷懒的方法。当然这样的好处就是可以简单化处理进度条,代码量少,不易出错,调试方便。

  还有一种方法,就是可以及时更新进度条的数据的。那就是采用事件驱动机制,在子线程中监视复杂处理过程中的设定的事件,及时更新!直接看代码:
程序代码using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace WindowsApplication1
{
/// <summary>
/// Form1 类
/// </summary>
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//用子线程工作
new System.Threading.Thread(new System.Threading.ThreadStart(StartDownload)).Start();
}
//开始下载
public void StartDownload()
{
Downloader downloader = new Downloader();
downloader.onDownLoadProgress += new Downloader.dDownloadProgress(downloader_onDownLoadProgress);
downloader.Start();
}
//同步更新UI
void downloader_onDownLoadProgress(long total, long current)
{
if (this.InvokeRequired)
{
this.Invoke(new Downloader.dDownloadProgress(downloader_onDownLoadProgress), new object[] { total, current });
}
else
{
this.progressBar1.Maximum = (int)total;
this.progressBar1.Value = (int)current;
}
}
}

/// <summary>
/// 下载类(您的复杂处理类)
/// </summary>
public class Downloader
{
//委托
public delegate void dDownloadProgress(long total,long current);
//事件
public event dDownloadProgress onDownLoadProgress;
//开始模拟工作
public void Start()
{
for (int i = 0; i < 100; i++)
{
if (onDownLoadProgress != null)
onDownLoadProgress(100, i);
System.Threading.Thread.Sleep(100);
}
}
}
}=================================ling========================================
delegate object dlExecuteQuery();
private void button1_Click(object sender, EventArgs e)
{
dlExecuteQuery de=new dlExecuteQuery(this.Query());
IAsyncResult ir = de.BeginInvoke(null, null);

Form f=new Form()
f.ShowDialog(this);
Application.DoEvents();
while (!ir.IsCompleted)
{
Application.DoEvents();
}
object obj = de.EndInvoke(ir);
f.Close();
}

private object Query()
{
//长时间的操作
}

yangjiang113 2009-05-21
  • 打赏
  • 举报
回复
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 10; i++)
{
Thread.CurrentThread.Join(500);
this.progressBar1.PerformStep();
}
}
效果明显些
老胡写代码 2009-05-21
  • 打赏
  • 举报
回复

this.backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
this.backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
this.backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
MethodA(worker,e);
if (worker.CancellationPending)
{
e.Cancel = true;
}
}

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
this.progressPercent.Value = e.ProgressPercentage;
}

private void MethodA(BackgroundWorker worker, DoWorkEventArgs e)
{
int totalPercent =100;
int perComplete = 0;
if (perComplete != (int)(((float)i / totalPercent) * 100))
{
perComplete = (int)(((float)i / totalPercent) * 100);
worker.ReportProgress(perComplete);
}
}
yangjiang113 2009-05-21
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 wxm3630478 的回复:]
顶一下,上面的例子搞了半天没搞出来啊.........继续
[/Quote]
我的不行?
不存在的 我昨天晚上都帮你试过的
我现在都可以运行
老胡写代码 2009-05-21
  • 打赏
  • 举报
回复
如果要异步的话,貌似可以考虑使用BackgroudWorker控件...
wxm3630478 2009-05-21
  • 打赏
  • 举报
回复
顶一下,上面的例子搞了半天没搞出来啊.........继续
LoveLife_Go 2009-05-21
  • 打赏
  • 举报
回复
学习一下
wxm3630478 2009-05-21
  • 打赏
  • 举报
回复
谢谢各位 我还要一个一个慢慢看了......
LutzMark 2009-05-21
  • 打赏
  • 举报
回复
http://www.cnblogs.com/yuxuanji/articles/1095011.html
redhat4 2009-05-21
  • 打赏
  • 举报
回复
关注


.


人力资源
wxm3630478 2009-05-21
  • 打赏
  • 举报
回复
没人了
niitnanfeng 2009-05-21
  • 打赏
  • 举报
回复
up,
zhangyong2502006 2009-05-20
  • 打赏
  • 举报
回复
.....
加载更多回复(26)

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧