C#带百分比的进度条

  1 功能需求:
  2       如果程序中会执行一个耗时的计算过程,我想在用户点击按钮后,弹出一个进度条窗口,显示正在执行的进度(最好能带有百分比),执行完成后,进度条窗口关闭,回到主程序窗口。 在关闭子窗口之前父窗体不能点击操作。
  3 
  4  
  5 
  6  
  7 
  8 ======================================================
  9 
 10 先设计Form2进度条窗体,在Form2中央上放ProgressBar控件progressBar1和Label控件label1,代码:
 11 
 12  
 13 
 14     public partial class Form2 : Form
 15     {
 16         public Form2(int _Minimum,int _Maximum)//带参数,表示进度条的范围的最小值和最大值
 17         {
 18             InitializeComponent();
 19             progressBar1.Maximum=_Maximum;//设置范围最大值
 20             progressBar1.Value = progressBar1.Minimum  = _Minimum;//设置范围最小值
 21 
 22         }
 23         public void setPos(int value)//设置进度条当前进度值
 24         {
 25             if (value < progressBar1.Maximum)//如果值有效
 26 
 27             {
 28                 progressBar1.Value = value;//设置进度值
 29                 label1.Text = (value * 100 / progressBar1.Maximum).ToString() + "%";//显示百分比
 30             }
 31             Application.DoEvents();//重点,必须加上,否则父子窗体都假死
 32         }
 33         private void Form2_Load(object sender, EventArgs e)
 34         {
 35             this.Owner.Enabled = false;//设置父窗体不可用
 36         }
 37         private void Form2_FormClosed(object sender, FormClosedEventArgs e)
 38         {
 39             this.Owner.Enabled = true;//回复父窗体为可用
 40         }
 41     }
 42 
 43  =================================================================
 44 
 45 调用窗体For1m设计,添加Button控件button1,事件代码:
 46 
 47         private void button1_Click(object sender, EventArgs e)
 48         {
 49             Form2 fm = new Form2(0,100);
 50             fm.Show(this);//设置父窗体
 51             for (int i = 0; i < 100; i++)
 52             {
 53                 fm.setPos(i);//设置进度条位置
 54                 Thread.Sleep(100);//睡眠时间为100
 55             }
 56             fm.Close();//关闭窗体
 57         }
 58 
 59  
 60 
 61  
 62 
 63 ****************************************************************************
 64 
 65 补充:有朋友说在vs2003中fm.Show(this):是不支持的,那么可以将From2的构造函数多加一个参数:
 66 
 67 ****************************************************************************
 68 
 69          public Form OwnerForm;
 70          public Form2(int _Minimum,int _Maximum,Form _OwnerForm)//带参数,表示进度条的范围的最小值和最大值
 71         {
 72             InitializeComponent();
 73             progressBar1.Maximum=_Maximum;//设置范围最大值
 74             progressBar1.Value = progressBar1.Minimum  = _Minimum;//设置范围最小值
 75 
 76             this.OwnerForm=_OwnerForm;
 77 
 78         }
 79         private void Form2_Load(object sender, EventArgs e)
 80         {
 81             this.OwnerForm.Enabled = false;//设置父窗体不可用
 82         }
 83         private void Form2_FormClosed(object sender, FormClosedEventArgs e)
 84         {
 85             this.OwnerForm.Enabled = true;//回复父窗体为可用
 86         }
 87 
 88 Form1中相应的修改为:
 89 
 90         private void button1_Click(object sender, EventArgs e)
 91         {
 92             Form2 fm = new Form2(0,100,this);
 93             fm.Show();//设置父窗体
 94             for (int i = 0; i < 100; i++)
 95             {
 96                 fm.setPos(i);//设置进度条位置
 97                 Thread.Sleep(100);//睡眠时间为100
 98             }
 99             fm.Close();//关闭窗体
100         }

 

posted @ 2016-04-22 14:08  想念熊小米  阅读(12916)  评论(0编辑  收藏  举报