2012-07-02 6 views
1

Je semble avoir un problème pour passer certaines chaînes d'une forme à l'autre. J'ai deux listBox sur Form1 mais je veux utiliser Form2 pour transmettre l'information dans les listBoxes dans Form1. Dans Form2, j'ai une fonction button_Click qui appelle une fonction dans Form1 avec la chaîne params a et la chaîne b.C# Listbox Passing Strings

private void button_Click(object sender, EventArgs e){ 
Form1 frm = new Form1(); 
frm.AddItemToListBox(txtBox1.Text,txtBox2.Text); 
} 

Voici le code pour appeler la fonction AddItemToListBox dans Form1. Ci-dessus est la fonction AddItemToListBox dans Form1.

AddItemToListBox(string a, string b){ 
listBox1.Items.Add(a); 
listBox2.Items.Add(b); 
} 

Toutefois, cela n'ajoute pas les chaînes dans les zones de liste. Il n'y a aucun message d'erreur ou quoi que ce soit. J'ai aussi essayé de déclarer 2 chaînes publiques STR1 et STR2

AddItemToListBox(string a, string b){ 
listBox1.Items.Add(a); 
listBox2.Items.Add(b); 
STR1 = a; 
STR2 = b; 
} 

Mais si je l'ai utilisé un bouton qui affiche la valeur de STR1 et STR2. Ils seront "", String.Empty. Rien n'apparaît dans le MessageBox qui affiche la valeur. Cependant, si je place le MessageBox.Show (a); et MessageBox.Show (b); dans la fonction AddItemToListBox, les chaînes seront affichées correctement mais ne seront pas ajoutées à la liste.

Cela m'a frustré depuis 2 heures maintenant et je veux savoir pourquoi et comment utiliser réellement cette méthode pour ajouter un élément à une liste si c'est possible. Le plus grand merci d'avance.

Répondre

3

Essayez d'ajouter un frm.Show() à la fin de cette méthode.

private void button_Click(object sender, EventArgs e) 
{ 
    Form1 frm = new Form1(); 
    frm.AddItemToListBox(txtBox1.Text,txtBox2.Text); 
    frm.Show(); 
} 

Mais je suis sûr que cela ne résout pas votre problème. Montrez simplement que vous devez référencer le Form1 correct. Je pense que vous créez une nouvelle instance de Form1, yuo doit répondre à la bonne une

+0

Merci pour la réponse rapide. Ça a marché. Je le comprends maintenant. – woodmon122

1
Form1 frm = new Form1(); 

Le plus va initialiser une nouvelle forme, il ne changera pas une instance existante de Form1.

+0

Merci. Je le comprends maintenant. Y a-t-il un moyen de ne pas initialiser un nouveau formulaire? Comme si j'appelais depuis Form1 – woodmon122

0

Soit vos entrées sont vides, donc debugwatch txtBox1.Text avant d'appeler

frm.AddItemToListBox(txtBox1.Text,txtBox2.Text); 

Ou la forme ne redessine pas après l'ajout de votre chaîne. Cela peut être forcé à l'aide

listBox1.Invalidate(); 
listBox2.Invalidate(); 

droit après avoir ajouté les chaînes