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 }