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 }