Une référence d’object est requirejse pour le champ, la méthode ou la propriété non statique.

Je sais que c’est probablement une question très newbish, alors je m’excuse.

J’essaie d’accéder à la propriété Text d’une étiquette sur Form1 à partir d’un autre formulaire, MaxScore.

Lorsque je clique sur le bouton OK de MaxScore, je souhaite définir myGameCountLbl.Text de Form1 sur la variable Form1, max en utilisant max.ToSsortingng ().

Voici mon code dans l’événement bouton OK de MaxScore:

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

Mais quand je vais le comstackr, j’obtiens l’erreur:

Une référence d’object est requirejse pour le champ, la méthode ou la propriété non statique ‘Towergame_2.Form1.myGameCountLbl’.

Je reçois la même erreur pour Towergame_2.Form1.max et Towergame_2.Form1.compGameCountLbl.

Je ne sais pas trop comment résoudre ce problème. Max est une variable publique et les deux étiquettes sont également publiques.

Merci!

Ceci est le code dans mon constructeur (merci lassevk pour le code!):

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

Est-ce que par hasard Form1 le nom de la classe?

Vous devez avoir une référence à une instance de la classe de formulaire.

Puisque okBtn ne se trouve pas sur le même formulaire, vous devez donner au formulaire MaxScore une référence à l’instance Form1 .

Par exemple, vous pouvez append ceci à votre formulaire MaxScore :

 public Form1 MainForm { get; set; } 

Et ensuite, dans votre méthode okBtn_Click , vous écrirez ceci:

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

et ensuite, lorsque vous construisez MaxScore partir de Form1 (je suppose que c’est ce que vous faites):

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

Je suis d’accord avec @lassevk en ce qui concerne la résolution de votre problème. Je vous recommande également de définir le comportement de la définition des étiquettes dans une méthode de la classe Form1, ce qui permet simplement de garder votre code plus propre et de garder la responsabilité / la connaissance des champs à mettre à jour et de la façon de les mettre à jour dans le formulaire parent. Vous définiriez simplement une méthode publique dans Form1 qui prend une valeur de chaîne et met à jour les étiquettes spécifiques avec cette valeur. Ensuite, dans le formulaire MaxScore, dans votre gestionnaire d’événements de clic de bouton, appelez cette méthode plutôt que d’essayer d’accéder directement à ces contrôles d’étiquette.

Juste matière à reflection.