2010-03-28 4 views
3

Je voudrais avoir un accès direct au texte à l'intérieur d'une zone de texte sur une autre forme, donc j'ajouté une variable publique _txt à une forme et a ajouté un événement comme ceci:Lier une zone de texte à une variable?

private void richTextBox1_TextChanged(object sender, EventArgs e) 
{ 
    _txt = richTextBox1.Text; 
} 

Mais la forme est chargé comme celui-ci :

public FrmTextChild(string text) 
{ 
    InitializeComponent(); 
    _txt = text; 
    richTextBox1.Text = _txt; 
    Text = "Untitled.txt"; 
} 

Existe-t-il un meilleur moyen de lier directement les deux?

Répondre

6

Vous pouvez utiliser une propriété au lieu de lire directement à partir de votre zone de texte. De cette façon, vous n'avez pas besoin d'une variable supplémentaire du tout.

public string Text 
{ 
    get 
    { 
    return richTextBox1.Text; 
    } 
} 

Ajoutez un setter si vous souhaitez également pouvoir modifier le texte.

2

Je ne pense pas que vous devriez jamais avoir des formes de référence des contrôles de l'autre: lorsque vous modifiez l'agencement de celui que vous devrez réécrire le code pour l'autre. Il est beaucoup mieux à mon humble avis pour stocker des valeurs partagées dans une catégorie distincte et ont les deux formes de référence que. Comme si:

public class DataContainer 
{ 
    public string SomeData{get;set;} 
} 

public class Form1:Form 
{ 
    private DataContainer _container; 
    public Form1(DataContainer container) 
    { 
     _container=container; 
    } 

    private void richTextBox1_TextChanged(object sender, EventArgs e) 
    { 
     _container.SomeData = richTextBox1.Text; 
    } 

    private void SpawnForm2() 
    { 
     var form2=new Form2(_container); 
     form2.Show(); 
} 

public class Form2:Form 
{ 
    private DataContainer _container; 
    public Form2(DataContainer container) 
    { 
    _container=container; 
    } 
} 
0

Une autre façon de le faire serait établirons le Modificateurs propriété pour la TextBox (ou tout autre contrôle que vous souhaitez accéder) à Protected interne puis ouvrez la deuxième forme, le Propriétaire étant le premier formulaire.

De cette façon, vous pouvez plus tard sur l'accès et le contrôle de ses propriétés avec quelque chose comme ceci:

((Form1)this.Owner).textBox1.Text = "This is a message from the second form"; 
Questions connexes