C# 我的标签不是';t从表格2更新
我已经在Form1上公开了以下两个控件(修饰符) 同样在Form1上,我像这样发布Form2C# 我的标签不是';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;
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";