【问题标题】:My Labels aren't updating from Form2我的标签没有从 Form2 更新
【发布时间】: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。如果代码没有任何意义,您将无法获得帮助。

标签: c# winforms


【解决方案1】:

看起来像整数除法的情况:

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

因为 progressBarForm2.Maximum 大于 progressBarForm2.Value 你有

  progressBarForm2.Value / progressBarForm2.Maximum == 0

要修改,只需更改顺序(先乘以100,然后):

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

【讨论】:

  • 这是 StackOverFlow 中的一个错字。
  • 这是导致问题的数学。谢谢。
  • 请注意,您的 ProgressBar.Value 属性可能高达 21474837。
【解决方案2】:

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

如果您将控件保留为 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 做类似的事情

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    相关资源
    最近更新 更多