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         }
相關文章
相關標籤/搜索