Faire communiquer deux fenetres avec C#?

Résolu/Fermé
feraudyh - 22 janv. 2008 à 17:57
 soul - 5 oct. 2008 à 19:01
Bonjour,
Je commence à developper en Visual Studio 2003 (C'est ma boite qui veut cela).
Je veux faire une application Windows dans laquelle il y a deux formulaires. Le premier formulaire contient une liste et un bouton "new element". Le but c'est d'ajouter un nouvel element à la liste affichée. Le deuxième formulaire est "affiché"(en tant que fenetre) lorsque l'utilisateur tappe sur le bouton New de la premiere fenetre.
Le but de cette deuxieme fenetre est d'interroger une base de données. Il y a un champ texte dans lequel on rentre un nom, un bouton "Chercher" puis en dessous une liste des Resultats de l'interogation de la base de données.
Ca pourrait être par exemple un nom de ville, et les résultats pourraient être des noms d'hotels dans ces villes.
L'utilisateur choisit un seul résultat dans la liste puis clique sur un bouton Apply. Le résultat est ensuite copié dans la liste de la premiere fenetre. Comme ca je pourrais constituer une liste de villes et d'hotels pour un tour de France.

Et voila ce que je ne sais pas faire, comment envoyer cette information à la premiere fenetre.
D'abord je ne sais pas comment on peut savoir dans l'instance de Form qui représente la deuxieme fenetre quel est l'instance de Form qui représente la premiere fenetre.
J'ai essayé this.Parent mais ca a engendré une exception, pourtant c'est la premiere fenetre qui a affiché la deuxieme.

Puis j'ai pensé que je pouvais utiliser les "Events". J'inscrirais la liste de premiere fenetre aux évenements du bouton apply. Puis je passerai les donnée dans une sous classe de EventArgs. Je ne sais pas faire ni l'un ni l'autre. Y a t il un exemple sur le Web pour m'aider??
A voir également:

4 réponses

Je vous remercie, votre réponse correspond tout a fait a ce que je voulais savoir...

Mon probleme etait surtout que, comme je debutait en C#, je ne connaissais pas (ou tres peu) le principe des délégate...

merci encore
6
feraudyh Messages postés 70 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 3 mars 2023 6
5 sept. 2008 à 17:35
C'est pas forcément très naturel, donc un exemple de référence est très utile.
-1
soul > feraudyh Messages postés 70 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 3 mars 2023
5 oct. 2008 à 19:01
Merci infiniment pour ton aide précieux à travers cet exemple qui m' également permis en tant que débutant de déppaser ce cap.

Par contre J'ai un secon souci, c'est que le formulaire1(form1) s'exécute toujours avant le second (form2); Alors je fais comment pour inverser ?
-1
Merci, je vais regarder. D'apres ta description ca ressemble à la première solution que j'avais envisagé. Entretemps j'ai étudié une méthode avec des évenements. La premiere fenetre souscrit à certains évenements de la deuxième, et agit en conséquence,
donc la deuxieme n'a pas besoin de connaitre qui souscrit aux évenements.
Mais je réponds sa avoir regardé ta solution de près.
1
Bonjour,

je suis un peut dans le même cas que tu étais et je voudrait savoir s'il te plait comment tu as fait pour lier les deux forms finallement.
Commment tu peux faire que la premiere fenetre puisse souscrire à certains evenement de la deuxieme je n'arrive pas a trouver.

Merci beaucoup d'avance pour ta reponse car moi je n'avance plus :s
0
feraudyh Messages postés 70 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 3 mars 2023 6 > Japan_Flag
5 sept. 2008 à 14:50
Votre question tombe à temps: je dois expliquer ceci à un collegue.
Je vais supposer que nous utlilisons C# 2005 tous les deux, mais ce n'est pas essentiel
Je crée une application Windows.
Dedans je crée deux formulaires Form1 et Form2.
Dans Form1 j'ai un textbox en lecture seule textBox1, et un bouton button1 avec texte "Display Form2"
Dans Form2 j'ai un textbox normal nommé textBox1 et une checkbox checkBox1.
Je double clique sur checkBox1 dans la vue concepteur pour remplir du code qui va en effet lire le contenu du
textBox1 local et communiquer cette valeur à la fenetre Form1. Form1 va s'inscrire à cet évenement pour remplir
son textbox1 avec le contenu du textBox1 de Form2.
Comment le faire?
Voici le code de Form2.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace ComDeuxFenetres
{
public delegate void Form2Event(string text);// declare a delegate
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public event Form2Event CheckForm2;// declare an event based on Form2Event

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
this.CheckForm2(textBox1.Text);//create the event
}
}
}

/**********************************/
//et maintenant voici le code de Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace ComDeuxFenetres
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Form2 form2;
private void fillTextBox(string s)
{
textBox1.Text = s;
}
private void button1_Click(object sender, EventArgs e)
{
form2 = new Form2();
form2.CheckForm2 += new Form2Event(this.fillTextBox);// subscribe form1's fillTextBox to the event
form2.Show();
}
}
}
0
lifeisnice Messages postés 1 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 28 janvier 2008
28 janv. 2008 à 23:01
Salut, voici un petit explicatif et un lien sur un exemple simple:

1: Créer ton application
2: Ajouter un nouvel élément à ton application, une Windows Form
3: Sur les 2 fenêtre placer un composant listbox.
4: Mettre le type d'accesseur du listbox de la 2 ème fenêtre à public (Propriété Modifiers)
5: Déclarer et instancier ta fenêtre 2 dans la classe de la première fenêtre
6: Dans ton prog, sur un clic du bouton tu affiches ta fenêtre 2, tu saisis les données et les places dans la liste
7: Lorsqu'elle est refermée, tu récupères les données de liste 1 vers liste 2

ici un le petit exemple: www.killapps.com/zip/Comm2Win.zip
0
Je viens de regarder le code et son execution et c'est une approche que je n'avais pas envisagée, mais pas du tout!
Tres interessant et merci pour ton temps.
0