Dialogue entre deux forms dans les deux sens

Résolu
freesurfer Messages postés 7 Date d'inscription mardi 18 janvier 2005 Statut Membre Dernière intervention 19 octobre 2005 - 18 oct. 2005 à 19:43
freesurfer Messages postés 7 Date d'inscription mardi 18 janvier 2005 Statut Membre Dernière intervention 19 octobre 2005 - 19 oct. 2005 à 17:14
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

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
19 oct. 2005 à 06:15
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#]
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
19 oct. 2005 à 16:19
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#]
3
freesurfer Messages postés 7 Date d'inscription mardi 18 janvier 2005 Statut Membre Dernière intervention 19 octobre 2005
18 oct. 2005 à 19:45
Ah oui pardon ... en C#
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
18 oct. 2005 à 20:26
Salut, regardes la source de Bidou :

http://www.csharp.fr/code.aspx?ID=26735
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
freesurfer Messages postés 7 Date d'inscription mardi 18 janvier 2005 Statut Membre Dernière intervention 19 octobre 2005
18 oct. 2005 à 20:41
malheureusement c'est pareil que pour moi la fenetre fille cache la fenetre mere .. on ne peut pas utiliser les deux en meme temps.
0
freesurfer Messages postés 7 Date d'inscription mardi 18 janvier 2005 Statut Membre Dernière intervention 19 octobre 2005
19 oct. 2005 à 08:44
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
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
19 oct. 2005 à 08:49
pour exécuter une méthode de Form1 à partir de Form2 ? Quelle est l'intérêt ?

Sébastien FERRAND
[MVP C#]
0
freesurfer Messages postés 7 Date d'inscription mardi 18 janvier 2005 Statut Membre Dernière intervention 19 octobre 2005
19 oct. 2005 à 12:43
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.
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
19 oct. 2005 à 13:42
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#]
0
freesurfer Messages postés 7 Date d'inscription mardi 18 janvier 2005 Statut Membre Dernière intervention 19 octobre 2005
19 oct. 2005 à 16:07
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
0
freesurfer Messages postés 7 Date d'inscription mardi 18 janvier 2005 Statut Membre Dernière intervention 19 octobre 2005
19 oct. 2005 à 17:14
merci beaucoups pour ta patience
0
Rejoignez-nous