Dialogue entre deux forms dans les deux sens [Résolu]

Signaler
Messages postés
7
Date d'inscription
mardi 18 janvier 2005
Statut
Membre
Dernière intervention
19 octobre 2005
-
Messages postés
7
Date d'inscription
mardi 18 janvier 2005
Statut
Membre
Dernière intervention
19 octobre 2005
-
Bonjour,

J'ai un programme contenant plusieurs forms.
J'ai une form Mere (form1) et deux filles (form2 et 3).
Les filles sont lancées par :



alerte1.textBox1.Text=id_client;


alerte1.textBox2.Text=id_contact1;


alerte1.textBox3.Text=impo;


alerte1.label1.Text = "RAPPEL : Client " + nomclient1 + "\n\nRappeler " + prenom1 + " " + nom1 + " au " + telc;


alerte1.ShowDialog(
this);

C'est le seul moyen que j'ai trouvé pour que form1 envoie des parametres à form2 et que form2 puisse executer et envoyer des parametres a form1. Soit un dialogue bilatteral.

Le probleme, c'est que dans ce cas la form2 reste sur la form1 et donc je ne peut pas utiliser ces deux forms en meme temps. A caus eje pense du ShowDialog(). Mais si j'utilise le Show() alors la la fille ne peut pas dialoguer avec la mere.

Comment puis je faire pour pouvoir avoir deux forms qui puissent se passer des parameteres et etre utilisables en meme temps ?

Merci
Nico

11 réponses

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
ce que je propose c'est d'utiliser un système un peu plus "solide".

Pour chaque contrôle dont tu veux récupérer la valeur (sur chaque formulaire), tu crées un évènement, exemple : TextClientChanged.
Ensuite pour chaque controle tu crées une propriété :

public string Client {
get {return TextClient.Text;}
set {TextClient.Text = value;}
}

voila, maintenant que c'est bon, tu ouvres les formulaires 2 et 3 de cette manière :

dans Form1 :

Form2 f2 = new Form2();
f2.TextClientChanged += new EventHandler(TextClientChanged_Changed);
... pareil pour les autres évènements ...

et donc dans le handler tu fais :
protected void TextClientChanged_Changed(object sender, EventArgs e) {
Form2 f2 = sender as Form2;

if (f2 == null) return;

monClient : f2.Client;
}

Comme ca, f2 ne contient pas de référence à f1...

Sébastien FERRAND
[MVP C#]
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
un exemple clair :

dans form2 :

public event EventHandler DataChanged;

/// dans le code de ton bouton tu ajoutes ceci :
if (DataChanged != null) {
this.DataChanged(this, EventArgs.Empty);
}

dans form1 :

/// tu t'abonnes à l'évènement DataChanged de form2
// donc après l'initialisation du ajoutes ca :
Form2 f2 = new Form2();
... blabla...
f2.DataChanged += new EventHandler(f2_DataChanged);

// et tu crées le handler comme ceci :
protected void f2_DataChanged(object sender, EventArgs e) {
... tu mets à jour tes données...
}

voila....

Sébastien FERRAND
[MVP C#]
Messages postés
7
Date d'inscription
mardi 18 janvier 2005
Statut
Membre
Dernière intervention
19 octobre 2005

Ah oui pardon ... en C#
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
39
Salut, regardes la source de Bidou :

http://www.csharp.fr/code.aspx?ID=26735
Messages postés
7
Date d'inscription
mardi 18 janvier 2005
Statut
Membre
Dernière intervention
19 octobre 2005

malheureusement c'est pareil que pour moi la fenetre fille cache la fenetre mere .. on ne peut pas utiliser les deux en meme temps.
Messages postés
7
Date d'inscription
mardi 18 janvier 2005
Statut
Membre
Dernière intervention
19 octobre 2005

Merci je vais tester ca, bon mon pietre niveau ma faire que je vais prendre du temps. Mais cette methode marche t elle si je veux executer une fonction sur Form1 depuis Form2 ?

merci
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
pour exécuter une méthode de Form1 à partir de Form2 ? Quelle est l'intérêt ?

Sébastien FERRAND
[MVP C#]
Messages postés
7
Date d'inscription
mardi 18 janvier 2005
Statut
Membre
Dernière intervention
19 octobre 2005

j'ai une fonction sur form1 qui met a jour les listviews de form1.
Depuis form 2 je rentre des données dans la base et à la fin de ce traitement je desire mettre a jour l'affichage des données des listviews du form1.
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
tu as un bouton sur form2 qui lance la mise à jour des listviews ?

si oui, déclare un évènement du genre : DataChanged
et tu le déclenches en cliquant sur le bouton.

avec ta form1 tu t'y abonnes et à la réception de l'évènement, tu mets à jorus tes listviews.

l'idée est d'éviter la double référence.

Sébastien FERRAND
[MVP C#]
Messages postés
7
Date d'inscription
mardi 18 janvier 2005
Statut
Membre
Dernière intervention
19 octobre 2005

en fait sur la form 2 j'ai un bouton qui met a jour la base et ensuite le lance la fonction sur la form 1 avec formmere.maj();
Cette fonction via des select met a jour le listview ...

Donc si je te comprends bien, je declache le datachanged d'un element de la form1 depuis la form2 et ce datachanged lance ma mise a jour
Messages postés
7
Date d'inscription
mardi 18 janvier 2005
Statut
Membre
Dernière intervention
19 octobre 2005

merci beaucoups pour ta patience