Une référence d'objet est requise pour la non-statique champ, une méthode ou une propriété?
Je sais que c'est probablement une très newbish question, donc je m'en excuse.
Je suis en train d'essayer d'accéder à la propriété Text d'une étiquette sur Form1 partir d'un autre formulaire, MaxScore.
Quand je clique sur le bouton Ok sur MaxScore, je veux mettre de Form1 myGameCountLbl.Texte à Form1 est variable, max par l'aide de max.ToString().
Voici mon code dans le bouton OK événement de MaxScore:
private void okBtn_Click(object sender, EventArgs e)
{
Form1.myGameCountLbl.Text = Form1.max.ToString();
Form1.compGameCountLbl.Text = Form1.max.ToString();
}
Mais quand je vais pour la compilation, j'obtiens l'erreur:
Une référence d'objet est requise pour la non-champ statique, la méthode ou la propriété 'Towergame_2.Form1.myGameCountLbl'
Je reçois la même erreur pour Towergame_2.Form1.max et Towergame_2.Form1.compGameCountLbl.
Pas tout à fait sûr de savoir comment résoudre ce problème. Max est une variable publique et les deux étiquettes sont pubis.
Merci!
C'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();
}
OriginalL'auteur Eric | 2009-05-13
Vous devez vous connecter pour publier un commentaire.
Est-ce que par hasard Form1 le nom de la classe?
Vous avez besoin d'avoir une référence à une instance de la classe form.
Depuis
okBtn
n'est pas sur le même formulaire, vous devez donner laMaxScore
forme d'une référence à laForm1
instance.Par exemple, vous pouvez ajouter ceci à votre
MaxScore
forme:Et puis dans votre
okBtn_Click
méthode, vous allez écrire ceci:et puis quand vous êtes à la construction de
MaxScore
deForm1
(je suppose que c'est ce que vous faites):Avez-vous réellement définir MainForm, comme je l'ai montré dans le dernier morceau de code?
Oui je l'ai fait. J'ai le dernier morceau de code dans mon constructeur Form1.
Après la compilation, il me donne un message d'avertissement à propos de ce code: MainForm.myGameCountLbl.Texte = MainForm.max.ToString(); l'avertissement: l'Accès à un membre sur " Towergame_2.Form1.max " peut provoquer une exception d'exécution parce que c'est un champ d'un maréchal-par classe de référence, Mais quand j'essaie de le lancer, puis il me donne une exception lorsque j'appuie sur le bouton OK.
Je pense que vous avez besoin de poster le code qui crée et ouvre le MaxScore formulaire, le code que j'ai montré devrait fonctionner, mais bien sûr, si il y a d'autres problèmes qui ont un impact cela, il ne sera pas.
OriginalL'auteur Lasse Vågsæther Karlsen
Je suis d'accord avec @lassevk en ce qui concerne la résolution du problème. Je recommande aussi enveloppant le comportement de réglage du rouleau d'étiquettes dans une méthode de la classe Form1, qui permet simplement de garder votre code plus propre et conserve la responsabilité et de la connaissance de ce que les champs à mettre à jour et comment les mettre à jour contenues dans le formulaire parent. Il vous suffit de définir une méthode publique dans Form1 qui prend une valeur de chaîne et met à jour les labels spécifiques à cette valeur. Puis, dans la MaxScore forme, dans votre event handler, vous auriez du appeler cette méthode plutôt que d'essayer d'accéder à ces contrôles label directement.
Seulement de la nourriture pour la pensée.
OriginalL'auteur nkirkes