我的标签未从Form2更新

时间:2015-02-12 14:55:59

标签: c# winforms

我在Form1

上创建了以下两个控件public(Modifiers)
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上的progressBar正在更新。标签不是

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

我找不到更好的方法来更新Form1上的控件,所以如果你们有更好的方法,我就是开放的。

2 个答案:

答案 0 :(得分:2)

看起来像整数divison 案例:

  ((progressBarForm2.Value / progressBarForm2.Maximum) * 100).ToString() 

,因为progressBarForm2.Maximum大于progressBarForm2.Value

  progressBarForm2.Value / progressBarForm2.Maximum == 0

进行修改,只需更改订单(首先乘以 100,然后除以):

  labelForm2.Text = ((progressBarForm2.Value * 100) / progressBarForm2.Maximum).ToString(); 

答案 1 :(得分:2)

关于你的评论" 我找不到更好的方法来更新Form1上的控件,所以如果你们有更好的方法,我就会打开。& #34;

如果将控件保密为Form1并公开方法或属性以访问您感兴趣的字段,那会更好。

例如,在Form1中

public String LabelText
{
     get { return label1.Text; }
     set { label1.Text = value; }
}

然后,您可以将Form1实例传递给Form2构造函数

Form2 frm2 = new Form2(this);

在Form2中

 private Form1 parent;


 public Form2(Form1 frm1)
 {
     parent = frm1;
 }

然后你可以使用公共财产

parent.LabelText = "New Label";

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