2017-02-24 3 views
1

sur le premier formulaire J'ai un bouton de chargement qui charge le fichier et appelle le deuxième formulaire. Dans la deuxième forme j'ai un richTextBox qui doit me montrer le texte du fichier ouvert, mais il ne montre rien, voici ce que j'ai essayé (j'ai fait richTextBox1 public pour y avoir accès)Afficher le texte dans un richTextBox sur un formulaire secon

private void btnLoad_Click(object sender, EventArgs e) 
    { 
     OpenFileDialog ofd = new OpenFileDialog(); 

     if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
     { 
      FormEditor f2 = new FormEditor(); 
      f2.ShowDialog(); 
      using (System.IO.StreamReader sr = new System.IO.StreamReader(ofd.FileName)) 
      { 
       f2.richTextBox1.Text = sr.ReadToEnd(); 
      } 
     } 

    } 

Si j'essaie le même code en mettant richTextBox dans la première forme cela fonctionne.

+0

ShowDialog() arrête le code là jusqu'à ce que la boîte de dialogue est fermée de sorte que vous Je n'y écris rien. Soit utiliser Show() ou passer le nom de fichier en tant que paramètre à FormEditor et l'obtenir sous cette forme – EpicKip

Répondre

2

Lorsque vous ouvrez f2 (f2.ShowDialog()), le code pour le remplissage richtextbox n'a pas été exécuté, et vous obtenez une zone de texte vide sur f2 (Le code après ShowDialog(), exécutera dès que vous fermez f2). Essayez:

FormEditor f2 = new FormEditor(); 
using (System.IO.StreamReader sr = new System.IO.StreamReader(ofd.FileName)) 
{ 
    f2.richTextBox1.Text = sr.ReadToEnd(); 
} 
f2.ShowDialog(); 
2

FormEditor devrait être responsable d'afficher le texte, pas la forme actuelle. Écrire le constructeur avec le paramètre pour FormEditor et lui passer le texte, puis enregistrez-le dans une variable et affichez-le dans richtextbox lors du chargement du formulaire.

Votre classe FormEditor devrait ressembler à ceci:

private string textForEdit{get;set;} 
public FormEditor(string txt) 
{ 
    textForEdit = txt; 
} 

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

Ensuite, le changement à l'intérieur de votre si bloc à ceci:

using (System.IO.StreamReader sr = new System.IO.StreamReader(ofd.FileName)) 
{ 
    FormEditor f2 = new FormEditor(sr.ReadToEnd()); 
    f2.ShowDialog(); 
}