【发布时间】:2015-02-12 14:55:58
【问题描述】:
我在 Form1 上公开了以下两个控件(修改器)
ProgressBar
Label
同样在 Form1 上,我像这样启动 Form2
Form2 f = new Form2(progressBar1, label1)
在 Form2 上,我在 Form2 中运行以下代码
private ProgressBar progressBarForm2;
private Label labelForm2;
public Form2(ProgressBar pb, Label lb)
{
labelForm2 = lb;
progressBarForm2 = pb;
}
然后在Form2.cs里面的一个方法中,我有如下代码
scoreScreen = 4;
progressBarForm2.Value = scoreScreen;
labelForm2.Text = ((progressBarForm2.Value / progressBarForm2.Maximum) * 100).ToString() + "% Complete";
labelForm2.Refresh();
Application.DoEvents();
ProgressBar 在 Form1 上更新正常
Form1 上的进度条正在更新。标签不是
我假设当我将控件传递给方法时,它是通过引用传递的,因此对方法中控件的任何更改都会更新原始控件。
我找不到更好的方法来更新 Form1 上的控件,所以如果你们有更好的方法,我愿意。
【问题讨论】:
-
我认为
(progressBarForm2.Value / progressBarForm2.Maximum)将返回一个整数,而不是一个浮点数。将progressBarForm2.Maximum转换为浮点数或双精度数。 -
这通常是一种非常糟糕的设计,将控制实例从一种形式共享到另一种形式。您可以在表单中简单地使用一个公共方法,例如 setProgress,您可以在其中将进度编号和标签文本作为参数,然后只有表单本身会知道使用哪个控件来分配参数值?这样你就可以保持整洁,没有其他表单会知道其他表单的内部细节,这通常是一种更面向对象的方法和漂亮的设计。
-
代码是废话,您使用的是名为 progressBar 的变量,而不是 progressBarForm2。如果代码没有任何意义,您将无法获得帮助。