非静态字段,方法或属性需要对象引用吗?

我知道这可能是一个非常新的问题,所以我道歉。

我试图从另一种formsMaxScore访问Form1上的标签的Text属性。

当我单击MaxScore上的Ok按钮时,我想通过使用max.ToString()将Form1的myGameCountLbl.Text设置为Form1的变量max。

这是我在MaxScore的OK按钮事件中的代码:

private void okBtn_Click(object sender, EventArgs e) { Form1.myGameCountLbl.Text = Form1.max.ToString(); Form1.compGameCountLbl.Text = Form1.max.ToString(); } 

但是当我去编译它时,我得到错误:

非静态字段,方法或属性“Towergame_2.Form1.myGameCountLbl”需要对象引用

我得到了Towergame_2.Form1.max和Towergame_2.Form1.compGameCountLbl的相同错误。

不太确定如何解决这个问题。 Max是一个公共变量,两个标签也是公共变量。

谢谢!

这是我的构造函数中的代码(谢谢lassevk的代码!):

 public Form1() { //initialize vars myHp = 100; compHp = 100; youWon = 0; compWon = 0; money = 100; canCompAttack = true; gameOver = false; //show HowToPlay Dialogue HowToPlay howToPlay = new HowToPlay(); howToPlay.ShowDialog(); using (MaxScore maxScore = new MaxScore()) { maxScore.MainForm = this; maxScore.ShowDialog(); } InitializeComponent(); } 

Form1的名称是否有任何机会?

您需要引用表单类的实例。

由于okBtn不在同一表单上,因此您需要为MaxScore表单提供对Form1实例的引用。

例如,您可以将其添加到MaxScore表单中:

 public Form1 MainForm { get; set; } 

然后在你的okBtn_Click方法中,你会写下这个:

 private void okBtn_Click(object sender, EventArgs e) { MainForm.myGameCountLbl.Text = MainForm.max.ToString(); MainForm.compGameCountLbl.Text = MainForm.max.ToString(); } 

然后当你从Form1构建MaxScore时(我假设你正在做的事情):

 using (MaxScore scoreForm = new MaxScore()) { scoreForm.MainForm = this; scoreForm.ShowDialog(); } 

我同意@lassevk解决您的问题。 我还建议将标签设置为Form1类中的方法的行为,这有助于保持代码更清晰,并保持更新哪些字段以及如何更新父表单中包含的字段的责任/知识。 您只需在Form1中定义一个公共方法,该方法接受一个字符串值并使用该值更新特定标签。 然后在MaxScore表单中,在按钮单击事件处理程序中,您将调用该方法而不是尝试直接访问这些标签控件。

只是值得深思。