2009-02-10 8 views
0

J'ai deux formulaires dans mon projet, form1 et form2. Lorsque je clique sur un bouton dans form1-je exécuter ce code:Accéder aux contrôles sur un nouveau formulaire

Form tempform = new Form2(); 
tempform.Show(); 

Dans mon code pour Form2 je une étiquette que je dois maintenant changer le texte. Comment puis-je accéder à l'étiquette?

J'ai essayé:

tempform.label1.value = "new text" 

Et cela ne fonctionne pas, j'ai même essayé d'accéder à l'aide de la collection Controls mais je pense que je foiré ça. Y a-t-il un moyen d'accéder à l'étiquette? OU est-il possible de transmettre une valeur à ce nouveau formulaire et de modifier le texte de l'étiquette.

Merci

Répondre

7

Si la valeur de l'étiquette ne doit être réglée une fois, lorsque le formulaire est créé, puis utiliser un constructeur pour Form2 comme ceci:

public Form2(string labelValue) 
{ 
    _labelValue = labelValue; 
} 

puis appeler ce constructeur lorsque vous créez le formulaire.

Par ailleurs, si l'étiquette change sur la durée de vie de la forme, font une propriété publique:

public string LabelValue 
{ 
    get { return label1.Text; } 
    set { label1.Text = value; } 
} 

Aussi, je recommande de nommer les paramètres et/ou des propriétés pour refléter le sens de la valeur, par exemple "titleText" au lieu de "labelValue". De cette façon, Form2 peut décider comment il veut afficher les informations (dans la barre de titre, une étiquette, une zone de texte, etc.), et Form1 n'a pas à s'inquiéter à ce sujet.

Edit: Consommez la propriété LabelValue comme ceci:

Form2 newForm = new Form2(); // Assign object to a Form2 instead of Form 
newForm.LabelValue = "new text"; 
newForm.Show(); 
+0

J'ai essayé de le faire et voici ce que je reçois: Erreur 'System.Windows.Forms.Form' ne contient pas de définition pour 'LabelValue' et aucune méthode d'extension 'LabelValue' acceptant un premier argument de type 'System.Windows.Forms.Form' n'a été trouvée – AntonioCS

+0

Vous référencez votre objet Form2 en tant que formulaire. Le type de formulaire n'aura pas les nouvelles méthodes définies. Vous devez créer une variable Form2. J'ai ajouté un exemple à ma réponse. – Misko

+0

Si vous affectez la valeur du champ via l'argument constructeur de Form2, vous pouvez conserver votre nouveau formulaire comme référence de formulaire. –

2

Les contrôles ont protected accès par défaut. Vous pouvez changer cela en public, ou vous pouvez ajouter une méthode/propriété à votre classe form2 pour définir l'étiquette et l'appeler (cette dernière méthode est généralement préférée pour préserver l'encapsulation et parce que le concepteur peut vouloir remplacer votre modification publique).

+0

J'ai ajouté cette méthode: SetLabelValue public void (valeur string) { Label1.Text = valeur; } Et a obtenu cette erreur: « System.Windows.Forms.Form » ne contient pas une définition pour « SetLabelValue » et aucune méthode d'extension – AntonioCS

+0

Assurez-vous que vous avez ajouté la fonction à la bonne forme, appelez dans le droit façon, et que form2 a été recompilé avant de l'utiliser dans la forme1 –

Questions connexes