Modifier le texte de l'étiquette dans Static void en C#
Je veux modifier le texte d'une étiquette sur un formulaire pour le texte d'un bouton sur une autre forme lorsque j'appuie sur le bouton.
Pour ce faire j'ai créé sur le formulaire où l'étiquette est
public static void changeText(string text)
{
L1.text = text;
}
ce code dans le formulaire avec le bouton
mainForm.changeText(this.Text);
Il donne alors l'erreur : Une référence d'objet est requise pour la non-statique champ, une méthode ou une propriété...
Cela peut sembler une question stupide, mais je suis encore novice en C#, donc s'il vous plaît aider moi.
- J'ai trouvé la réponse ici, c'est la première réponse, je vous remercie Lasse V. Karlsen ! stackoverflow.com/questions/860370/...
Vous devez vous connecter pour publier un commentaire.
L1 n'est pas statique, de sorte que vous ne pouvez pas avoir une fonction statique qui interagissent avec elle. Avoir une statique laissez-vous capable d'écrire quelque chose comme
MainForm.changeText(...)
, mais dans ce cas, qu'est-ce que la L1 ?Je pense que nous pouvons dire:
Examiner si la fonction que vous avez besoin est si générale qui peut s'appliquer à de nombreuses étiquettes sur votre application, dans ce cas une méthode d'extension serait bon. Dans d'autres cas, si vous voulez une fonction dans le formulaire principal pour définir le texte quelque part, et cela peut changer, ou le texte besoin d'une certaine déformation, une membre fonction serait une bonne chose, et probablement un La liaison de données serait mieux.
Environ statiques et non statiques membres
Il existe deux sortes de type de membres: non-statique et statique. Les membres Non statiques sont également appelé les membres de l'instance, car ils apparaissent dans les instances de l'objet de ce type. Les membres statiques sont liés au type de lui-même, et pas à ses instances d'objet, de sorte que vous pouvez les utiliser sans l'instanciation du type.
De considérer les éléments suivants:
Vous pouvez utiliser le type ci-dessus comme suit:
À votre problème spécifique...
Si vous êtes parfaitement sûr que vous avez besoin de cette logique à l'intérieur d'une méthode statique, vous aurez besoin pour obtenir un objet instance de la forme que vous souhaitez changer.
Malheureusement, les singletons ne fonctionnent pas très bien, parce que le VS concepteur doit créer une instance d'objet de votre Formulaire, qui, évidemment, viole le pattern singleton.
Ce que vous pouvez encore utiliser, est (dans le cas d'une application Windows Forms): Application.OpenForms. Cette fonction retourne une collection en lecture seule qui contient l'ensemble des formes de l'application. Vous pouvez l'utiliser pour trouver l'objet de l'instance de la forme que vous souhaitez modifier, puis effectuer ce changement.
Noter que si c'est un multi-fileté situation (c'est à dire la méthode statique s'exécute dans un thread différent que le thread GUI), vous aurez à utiliser une sorte de mécanisme de synchronisation, tels que InvokeRequired et Invoke().
Vous ne souhaitez pas utiliser une méthode statique pour cela, car L1 est un membre de la mainForm classe.
L'erreur signifie que votre fonction statique est de l'accès à une variable non statique (contrôle de L1).
Fonctions statiques peuvent uniquement accéder aux variables statiques. Vous pouvez modifier L1 à la variable statique pour le faire fonctionner.