2010-10-10 5 views
1

J'ai deux formulaires: Form1 et Form2. Je peux obtenir le contenu d'une liste dans Form1 à une autre liste dans Form2 en appelant un nouveau Form2 et en passant les valeurs po. Je mets à jour la liste dans form2 par exemple, en supprimant un élément de lui. Comment est-ce que je passerais le contenu de la liste de Form2 RETOUR à la liste originale dans Form1? Form1 est le premier formulaire qui apparaît lorsque l'application s'exécute, donc je ne veux pas appeler une nouvelle instance du formulaire.Renvoyer une valeur au formulaire original

+0

Quel est votre code pour afficher 'form2'? – ChrisF

Répondre

1

Vous pouvez passer l'instance initiale de Form1 à Form2 et utiliser cette référence pour renvoyer les données à Form1.

// A property `Form2` 
public Form1 RefToForm1 { get; set; } 

// On form 1, after initializing `Form2`: 
Form2 frm2 = new Form2(); 
frm2.RefToForm1 = this; 

Note:

Il y a une meilleure solution que ci-dessus (il est rapide et sale). Une meilleure option serait de créer une propriété sur Form2 avec le type de données dont vous avez besoin Form1 et accéder aux données à travers elle:

// A property `Form2` 
public List<int> Form2DataForForm1 { get; set; } 

// On form 1 
var dataFromForm2 = frm2.Form2DataForForm1; 
+2

Je trouve que cette solution crée une dépendance bidirectionnelle entre Form1 et Form2. Je préfère éviter que Form2 dépende de Form1; voir ma réponse sur cette page. – CesarGon

+0

Merci cela a fonctionné un charme absoloute. Merci beaucoup encore. –

+0

@CesarGon - La dépendance est déjà là. Le rendre bidirectionnel ne rend pas les choses plus difficiles (à mon avis), et rend la relation plus explicite (le fait que les données doivent voyager dans les deux sens). – Oded

2

Je vous suggère de mettre en œuvre une propriété Form2 qui renvoie les données pertinentes, et ont Form1 a lu cette propriété en "tirant" les données de Form2.

Cela vaut mieux que Form2 "repousse" les données dans Form1, car il ne conserve que les dépendances à sens unique.

+0

Ni pousser ni tirer n'est intrinsèquement meilleur. Pour tirer, utilisez les propriétés décrites par Cesar. Pour pousser, utilisez les événements. –

+0

@Ben: Je suis d'accord, ni pousser ni tirer est intrinsèquement meilleur. Mais une dépendance unidirectionnelle est préférable à une dépendance bidirectionnelle. Pousser un événement peut maintenir les dépendances à sens unique, ce qui est bien. – CesarGon

+0

C'est mieux si vous pouviez fournir du code pour mieux comprendre – venkat

Questions connexes