C#实现带百分比的进度条功能示例
作者:何问起 发布时间:2023-09-08 14:17:03
标签:C#,进度条
本文实例讲述了C#实现带百分比的进度条功能。分享给大家供大家参考,具体如下:
功能需求:
如果程序中会执行一个耗时的计算过程,我想在用户点击按钮后,弹出一个进度条窗口,显示正在执行的进度(最好能带有百分比),执行完成后,进度条窗口关闭,回到主程序窗口。 在关闭子窗口之前父窗体不能点击操作。
实现方法:
先设计Form2进度条窗体,在Form2中央上放ProgressBar控件progressBar1和Label控件label1,代码:
public partial class Form2 : Form
{
public Form2(int _Minimum,int _Maximum)//带参数,表示进度条的范围的最小值和最大值
{
InitializeComponent();
progressBar1.Maximum=_Maximum;//设置范围最大值
progressBar1.Value = progressBar1.Minimum = _Minimum;//设置范围最小值
}
public void setPos(int value)//设置进度条当前进度值
{
if (value < progressBar1.Maximum)//如果值有效
{
progressBar1.Value = value;//设置进度值
label1.Text = (value * 100 / progressBar1.Maximum).ToString() + "%";//显示百分比
}
Application.DoEvents();//重点,必须加上,否则父子窗体都假死
}
private void Form2_Load(object sender, EventArgs e)
{
this.Owner.Enabled = false;//设置父窗体不可用
}
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
this.Owner.Enabled = true;//回复父窗体为可用
}
}
调用窗体For1m设计,添加Button控件button1,事件代码:
private void button1_Click(object sender, EventArgs e)
{
Form2 fm = new Form2(0,100);
fm.Show(this);//设置父窗体
for (int i = 0; i < 100; i++)
{
fm.setPos(i);//设置进度条位置
Thread.Sleep(100);//睡眠时间为100
}
fm.Close();//关闭窗体
}
补充:有朋友说在vs2003中fm.Show(this):是不支持的,那么可以将From2的构造函数多加一个参数:
public Form OwnerForm;
public Form2(int _Minimum,int _Maximum,Form _OwnerForm)//带参数,表示进度条的范围的最小值和最大值
{
InitializeComponent();
progressBar1.Maximum=_Maximum;//设置范围最大值
progressBar1.Value = progressBar1.Minimum = _Minimum;//设置范围最小值
this.OwnerForm=_OwnerForm;
}
private void Form2_Load(object sender, EventArgs e)
{
this.OwnerForm.Enabled = false;//设置父窗体不可用
}
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
this.OwnerForm.Enabled = true;//回复父窗体为可用
}
Form1中相应的修改为:
private void button1_Click(object sender, EventArgs e)
{
Form2 fm = new Form2(0,100,this);
fm.Show();//设置父窗体
for (int i = 0; i < 100; i++)
{
fm.setPos(i);//设置进度条位置
Thread.Sleep(100);//睡眠时间为100
}
fm.Close();//关闭窗体
}
希望本文所述对大家C#程序设计有所帮助。


猜你喜欢
- 之前没有接触过购物车的东东,也不知道购物车应该怎么做,所以在查询了很多资料,总结一下购物车的功能实现。查询的资料,找到三种方法:1.用coo
- 本文实例讲述了C#图像颜色聚类高效方法。分享给大家供大家参考。具体分析如下:图像颜色聚类的方法有很多,但是对于视频监控而言,现有方法很难满足
- Android 将view 转换为Bitmap出现空指针问题解决办法在做Android 项目的时候,有时候可能有这样的需求,将一个View
- 1.介绍说明: 其实@Valid 与 @Validated都是做数据校验的,只不过注解位置与用法有点不同。不同点:(1)@Valid是使用H
- typora-copy-images-to: ./一键清除maven仓库中下载失败的jar包maven是一款非常优秀的项目管理工具,特别是其
- 约瑟夫环约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数
- 这篇文章主要介绍了Java中遍历ConcurrentHashMap的四种方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一
- JAVAWEB dbutils执行sql命令并遍历结果集时不能查到内容的原因及处理方法如下所示:遍历结果集时只遍历bean对象才会只输出第一
- java的接口解耦方式我只想把抽象的东西说的具体,或者说,听起来简单些,明白些。。。学过java的人都知道,java是单继承的,也就是说一个
- 本文实例讲述了C#中foreach语句使用break暂停遍历的方法。分享给大家供大家参考。具体分析如下:下面的代码演示了在C#中使用fore
- [LeetCode] 131.Palindrome Partitioning 拆分回文串Given a string s, par
- 目录概览问题一原因解决办法问题二原因解决办法概览在当下几乎所有的公司都采用了前后端分离的开发模式,Swagger作为了在API在线文档工具,
- 很久没写文章了,一方面是最近几个月比较忙,没太多时间,另一方面是最近拖延症严重,写文章的想法总是一拖再拖。今天找一个小案例写一下,与懒惰对抗
- 目录wait-notifyjoin方式ReentrantLockReentrantLock+ConditionSemaphore三个线程T1
- SpringBoot整合Mybatis自定义 * 不起作用Mybatis插件生效的方式:1. 原始的读取mybatis-config.xml
- 服务器提交了协议冲突. Section=ResponseHeader Detail=CR 后面必须是 
- 首先声明一点,这里的重试并不是报错以后的重试,而是负载均衡客户端发现远程请求实例不可到达后,去重试其他实例。@Bean@LoadBalanc
- 本文实例讲述了C#将HashTable中键列表或值列表复制到一维数组的方法。分享给大家供大家参考。具体如下:下面的示例说明如何将 Hasht
- 遇到的坑这里我把做这个功能中遇到的一些问题写在前面,是为了大家能先了解有什么问题存在,遇到这些问题的时候就不慌了,这里我把应用图标和名称先统
- 很多时候我们用HTML布局会更方便直接,记录一下。我现在主要是直接调用服务器的网页(实际上是jsp的,只是返回的是html),所以需要联网,