C# 我的标签不是';t从表格2更新

C# 我的标签不是';t从表格2更新,c#,winforms,C#,Winforms,我已经在Form1上公开了以下两个控件(修饰符) 同样在Form1上,我像这样发布Form2 Form2 f = new Form2(progressBar1, label1) 在Form2上,我在Form2中运行以下代码 private ProgressBar progressBarForm2; private Label labelForm2; public Form2(ProgressBar pb, Label lb) { labelForm2 = lb;

我已经在Form1上公开了以下两个控件(修饰符)

同样在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上的fine

Form1上的progressBar正在更新。标签不是

我假设当我将一个控件传递到一个方法中时,它是通过引用传递的,因此对该方法中控件的任何更改都将更新原始控件

我找不到更好的方法来更新Form1上的控件,所以如果你们有更好的方法,我愿意

看起来像整数除法:

由于
progressBarForm2.最大值
大于
progressBarForm2.值

  progressBarForm2.Value / progressBarForm2.Maximum == 0
要修改,只需更改顺序(先乘以100,然后除以):

关于你的评论,“我找不到更好的方法来更新Form1上的控件,所以如果你们有更好的方法,我愿意。”

最好将控件留给Form1,并公开方法或属性来访问感兴趣的字段

例如,在表格1中

public String LabelText
{
     get { return label1.Text; }
     set { label1.Text = value; }
}
然后可以将Form1实例传递给Form2构造函数

Form2 frm2 = new Form2(this);
表格2

 private Form1 parent;


 public Form2(Form1 frm1)
 {
     parent = frm1;
 }
然后您可以使用公共属性

parent.LabelText = "New Label";

然后,您可以对ProgressBar执行类似的操作

我认为
(progressBarForm2.Value/progressBarForm2.max)
将返回一个整数,而不是浮点。将
progressBarForm2.Maximum
转换为float或double。这种从一个窗体到另一个窗体共享控件实例的设计通常非常糟糕。您可以在表单中简单地使用一个公共方法,比如setProgress,将进度号和标签文本作为参数,然后只有表单本身才知道使用哪个控件来分配参数值?这样你就可以保持整洁,没有其他表单知道其他表单的内部细节,这通常是一种更加面向对象的方法和良好的设计。代码毫无意义,你使用的是一个名为progressBar的变量,而不是progressBarForm2。如果代码没有任何意义,您将无法获得帮助。这是StackOverFlow中的一个输入错误。是数学问题造成的。谢谢。请小心你的
ProgressBar。属性值可能会高达21474837。
Form2 frm2 = new Form2(this);
 private Form1 parent;


 public Form2(Form1 frm1)
 {
     parent = frm1;
 }
parent.LabelText = "New Label";