簡體   English   中英

非靜態字段,方法或屬性是否需要對象引用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM