2009-09-08 8 views

Répondre

3

Fondamentalement, de la même manière que vous le feriez avec un autre objet. Vous devez avoir une référence à l'autre formulaire, et si c'est un type différent, il doit exposer la zone de texte qui vous intéresse en tant que propriété, ou avoir une méthode pour définir le texte. Ainsi, par exemple, vous pourriez avoir:

public class FirstForm : Form 
{ 
    private TextBox nameInput; 
    public TextBox NameInput { get { return nameInput; } } 

    ... 
} 

public class SecondForm : Form 
{ 
    private TextBox otherNameInput; 
    private FirstForm firstForm; 

    public void CopyValue() 
    { 
     firstForm.NameInput.Text = otherNameInput.Text; 
    } 
} 

Ou mettre la responsabilité textbox dans la première forme:

public class FirstForm : Form 
{ 
    private TextBox nameInput; 
    public string Name 
    { 
     get { return nameInput.Text; } 
     set { nameInput.Text = value; } 
    } 

    ... 
} 

public class SecondForm : Form 
{ 
    private TextBox otherNameInput; 
    private FirstForm firstForm; 

    public void CopyValue() 
    { 
     firstForm.Name = otherNameInput.Text; 
    } 
} 

Il existe plusieurs autres façons de la peau du chat, mais ce sont les plus communs. La façon dont vous obtenez la référence au FirstForm dans le SecondForm varie - il peut être transmis au constructeur pour SecondForm, ou il peut être créé par SecondForm lui-même. Cela dépendra du reste de votre interface utilisateur. Notez que cela suppose que les deux formulaires utilisent le même thread d'interface utilisateur. Il est possible (mais relativement rare) d'avoir des threads d'interface utilisateur différents pour différentes fenêtres, auquel cas vous devrez utiliser Control.Invoke/BeginInvoke.

+0

ce code affiche la valeur de la zone de texte dans l'en-tête de la deuxième forme – ush

+0

L'affichage est assez peu pertinent. Quel morceau de ma réponse trouvez-vous difficile à mettre en œuvre? –

+0

Juste pour confirmer la meilleure pratique ici - si j'ai plusieurs POCO (je peux dire POCO? :) qui ont besoin de mettre à jour une boîte de texte dans un formulaire (par exemple résultats de progrès), disons que je dois passer une référence du formulaire chaque classe que je veux parler à la forme? – Vidar

0

Modifiez la classe et remplacez le constructeur du formulaire pour transmettre les données souhaitées. Dans le magasin du constructeur, le varialble est transmis, dans une variable membre.

0

Vous devriez suivre les conseils de Jon. L'autre façon peut-être quelque chose d'aussi sale que cela:

// Bad practice 
foreach (var child in theOtherForm.Controls){ 
    if(child.Name == '_otherControlName') 
    { 
     (child as TextBox).Text = _thisTextBox.text; 
    } 
} 

Vous devrez peut-être vérifier certains types et l'enfant de certains panneau contrôle aussi bien.

Questions connexes