[英]An object reference is required for the non-static field, method, or property?
我知道這可能是一個非常新奇的問題,因此我深表歉意。
我試圖從另一個窗體MaxScore訪問Form1上標簽的Text屬性。
當我單擊MaxScore上的“確定”按鈕時,我想使用max.ToString()將Form1的myGameCountLbl.Text設置為Form1的變量max。
這是我在MaxScore的“確定”按鈕事件中的代碼:
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表單的按鈕單擊事件處理程序中,您將調用該方法,而不是嘗試直接訪問那些標簽控件。
值得深思。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.