2010-09-03 5 views
1

J'utilise le même code pour remplir un contrôle dans mon WinForms encore et encore, donc j'ai pensé: Hey, vous devriez en faire une méthode au lieu de copier-coller!Utiliser une méthode pour manipuler un contrôle dans WinForms

Alors, j'ai créé dans ma Main classe

principal

internal static void FillWithStuff(RichTextBox box) 
{ 
Data data = GetSomeData("doesn't matter"); 
foreach (Row row in data) 
{ 
    box.Text += row.ToString() + "\r\n"; 
} 
} 

WinForm

internal RichTextBox textBox = new RichTextBox(); 
// Some code 
Main.FillWithStuff(textBox); 

Ainsi, la méthode exécute sans exceptions ou des avertissements, mais les données n'est pas rempli dans la boîte. J'ai vérifié si les données ont été chargées et c'est le cas, donc le problème doit être ailleurs.

Comment dois-je l'implémenter correctement?

+0

Pourrait-il être un problème avec le RichTextBox? Avez-vous essayé d'ajouter quelque chose avant l'appel à FillWithStuff? – Rox

Répondre

1
using System; 
using System.Collections.Generic; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private List<string> GetStuff() 
     { 
      List<string> stuff = new List<string>(); 

      stuff.Add("foo"); 
      stuff.Add("bar"); 
      stuff.Add("baz"); 

      return stuff; 
     } 

     private void FillWithStuff(TextBoxBase textBox) 
     { 
      List<string> stuff = GetStuff(); 

      foreach (string s in stuff) 
      { 
       textBox.Text += s + "\r\n"; 
      } 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      FillWithStuff(richTextBox1); 
     } 
    } 
} 

Cela fonctionne comme prévu. En le comparant avec ce que vous avez, je pense que vous avez un problème ailleurs. Êtes-vous sûr que row.ToString() renvoie une chaîne non vide?

+0

Utilisez ['AppendText'] (http://msdn.microsoft.com/fr-fr/library/system.windows.controls.primitives.textboxbase.appendtext.aspx) au lieu de' + = '! –

0

Avez-vous appelé Main.FillWithStuff (...) après quelque chose comme Application.Run (formulaire) ou form.ShowDialog()? Dans ce cas, Main.FillWithStuff (..) ne s'exécutera pas à moins que vous ne fermiez le formulaire, essayez de déplacer votre appel de méthode avant lui

0

Pouvez-vous coller dans le code entier pour le Winform? D'après ce que je peux dire, c'est une variable de niveau formulaire, car elle est marquée comme interne.

J'ai testé cela en utilisant un formulaire qui était déjà sur le formulaire ainsi que celui qui est créé dynamiquement et les deux fois il a rempli le RichTextBox avec le texte comme prévu. Essayez de placer un point d'arrêt dans votre boucle foreach et assurez-vous qu'il renvoie des données.

Questions connexes