È richiesto un riferimento a un object per il campo, il metodo o la proprietà non statici?

So che questa è probabilmente una domanda molto nuova, quindi mi scuso.

Sto cercando di accedere alla proprietà Text di un’etichetta su Form1 da un altro modulo, MaxScore.

Quando faccio clic sul pulsante OK su MaxScore, voglio impostare Form1’s myGameCountLbl.Text sulla variabile di Form1, max usando max.ToString ().

Ecco il mio codice nell’evento del pulsante OK di MaxScore:

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

Ma quando vado a compilarlo, ottengo l’errore:

È richiesto un riferimento a un object per il campo, il metodo o la proprietà non statici “Towergame_2.Form1.myGameCountLbl”

Ottengo lo stesso errore per Towergame_2.Form1.max e Towergame_2.Form1.compGameCountLbl.

Non sei sicuro di come risolvere questo problema. Max è una variabile pubblica e le due etichette sono anche pubbliche.

Grazie!

Questo è il codice nel mio costruttore (grazie a lassevk per il codice!):

 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(); } 

È per caso Form1 il nome della class?

È necessario avere un riferimento a un’istanza della class del modulo.

Poiché okBtn non è sullo stesso modulo, è necessario fornire al modulo MaxScore un riferimento all’istanza Form1 .

Ad esempio, puoi aggiungerlo al tuo modulo MaxScore :

 public Form1 MainForm { get; set; } 

E poi nel tuo metodo okBtn_Click , scriverai questo:

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

e poi quando costruisci MaxScore da Form1 (presumo che sia quello che stai facendo):

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

Sono d’accordo con @lassevk per quanto riguarda la risoluzione del problema. Ti consigliamo inoltre di impostare il comportamento di impostare le etichette in un metodo all’interno della class Form1, che semplicemente aiuta a mantenere il codice più pulito e mantiene la responsabilità / conoscenza di quali campi aggiornare e come aggiornarli contenuti nel modulo padre. Dovresti semplicemente definire un metodo pubblico in Form1 che accetta un valore stringa e aggiorna le etichette specifiche con quel valore. Quindi, nel modulo MaxScore, nel gestore eventi del clic del pulsante, chiameresti tale metodo piuttosto che provare ad accedere direttamente a questi controlli etichetta.

Solo spunti di riflessione.