IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Transmission de données entre 2 Form


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 110
    Points : 53
    Points
    53
    Par défaut Transmission de données entre 2 Form
    Bonjour;

    Dans la première Form1 f1, je déclare variable globale "public string[] str = new string [100];"

    J'ajoute une seconde Form f2que j'affiche a partir de la première Form par " Form2 f2 = new Form2(); f2.ShowDialog();"

    Dans cette f2, j'ai un tableau de valeur string genre " string[] tab = new string[100]". Dans cette f2, je crée une instance de Form1, par " Form1 ff1 = new Form1(); puis je veux copier le tableau de f2 dans ff1 par " ff1.str = tab; ". Le compilateur ne sort aucune erreur mais le tableau dans ff1 n'est pas à jour .... pourquoi ???
    Merci a vous de votre aide.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Points : 1 876
    Points
    1 876
    Par défaut
    Bonjour,

    Ce serait plus concret de poster le code que vous avez.
    Ceci dit, les exemples ne manquent pas sur Internet.

    Mais si je lis correctement, ça me semble "normal", dans F2 vous créez une nouvelle instance de F1 qui n'est pas l'instance existante.

    Il serait plus propre et plus safe d'envoyer les données sous forme d'arguments, et laisser le form de destination gérer l'affichage, plutôt que de tenter de mettre à jour des contrôles à partir d'un autre form. Pour cela il y a l'utilisation de delegates par exemple. Et vous pouvez aussi surclasser la méthode show du form de destination.

    Ou encore mieux: utiliser des événements, ils sont là pour ça. Exemple: https://stackoverflow.com/questions/...orm-in-c-sharp

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 110
    Points : 53
    Points
    53
    Par défaut
    Merci binarygirl de votre réponse.

    je vais faire lecture du lien que vous me donnez .. instructive j'imagine.

    Mon code:
    Dans Form1: où est déclarer "public string[] t_adh = new string[100];"
    Form2 Form_nv_adh = new Form2();

    Form_nv_adh.ShowDialog(); // affichage de Form nv_adh

    Dans Form2: où est déclarer un autre tableau de string " string [] tab = new string[100];"

    Dans Form2, j'enregistre des données que je voudrais passer à Form1 dans t_adh
    // création d'une instance de Form1

    Form1 ff = new Form1();
    ff.t_adh = tab;

    VOila! Le compilateur ne rugit pas .... mais le t_adh n'est pas à jour.
    Merci encore



    ()

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 110
    Points : 53
    Points
    53
    Par défaut
    Encore moi bonjour;

    Question sur les délégués ?

    Dans un "Namespace" je déclare un type de délégué => "public delegate void toto();" qui ne renvoie rien avec aucun paramètre

    Dans une WinForm2 de Classe Form2 : Form

    je déclare un évènement de type délégué toto: " public event toto event_toto; "

    .... du code ...

    plus loin .....La Fonction chargée de déclencher l'évènement a la fermeture de Form2:

    " private void Form2_FormClosing ( object sender, FormClosingEventArgs e )
    {
    .........
    event_toto.Invoke() // pourquoi il me dit que event_toto est nul ?????????????????????

    .....
    }

    Dans ma Classe Form1, je m'abonne à l"évènement

    Form2 f2 = new Form2();
    f2.event_toto += Maj_fichier; // méthode senser être déclenchée par l'évènement event-toto mais qui ne déclenche rien car nul

    Pourquoi event_toto est NULL quand je l'appèle ???

    Merci a vous Molo

  5. #5
    Membre chevronné
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 122
    Points : 2 235
    Points
    2 235
    Par défaut
    Bonjour,

    Une possibilité :

    Form2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       public Form1 F;
     
       F.str = "données passées depuis Form2";
    Form1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      public string str = "données non initialisées";
      Form2 frm = new Form2();
      frm.F = this;
      frm.ShowDialog();
      MessageBox.Show(str);
    Une petite précision : les données (F, str) sont déclarées au niveau module, le reste est dans une méthode par exemple Form_Load.


    Mais Binarygirl a de meilleures idées.

  6. #6
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 79
    Points : 118
    Points
    118
    Par défaut
    Bonjour,
    Une solution (pas LA solution) est d'utiliser un objet (class) data manager, objet commun à tous les autres avec les accesseurs, méthodes qui vont bien.
    N'importe quel objet peut accéder à ce Data Manager à condition qu'il soit Thread Safe pour éviter les conflits... (voir Singleton sur google)
    On peut jouer avec les attributs de Get et Set pour éviter les erreurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    public sealed class DM
    {
    private static readonly Lazy<DM> lazy = new Lazy<DM>(() => new DM());
     
    public static DM Instance { get { return lazy.Value; } }
     
    public DM()
    {
    }
     
    public string toto {get; set;}
    public string tutu {get; private set; }
     
    public void UpdateTutu(string s)
    {
    tutu = s;
    }
     
    }
    pour accéder à toto depuis n'importe quel objet (form, class...) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    DM.Instance.toto = "bonjour";
    DM.Instance.UpdateTutu("au revoir");
    // ou
    string str1 = DM.Instance.toto;
    string str2 = DM.Instance.tutu;

  7. #7
    Membre chevronné
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 122
    Points : 2 235
    Points
    2 235
    Par défaut
    Ah oui, si je ne m'abuse dans certains cas, pour une application WinForms, le module Program.cs peut héberger une variable.

    Mais il faut que ce soit une variable static, je précise que je dis ça de mémoire, si je dis une bêtise il ne faudra pas hésiter à venir le dire.

  8. #8
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Délégué, Data manager, Lazy Loading, variable dans Program.cs, ...
    Tout cela m'a l'air bien compliqué pour simplement transmettre un tableau d'une forme à une autre.

    Lis la réponse que j'ai faite dans ce Thread, c'est bien plus simple.
    https://www.developpez.net/forums/d1...e-entre-forms/

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/08/2008, 09h56
  2. Transmission de donnée entre le 68hc11 et un PC
    Par moumouss dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 10/12/2007, 21h23
  3. transmission des données entre ASP et le serveur
    Par mademoizel dans le forum ASP
    Réponses: 3
    Dernier message: 17/12/2006, 20h11
  4. [C#]Transmission de données entre forms
    Par fafa139 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/05/2006, 18h44
  5. [VB.Net] Transmission d'information entre 2 Form
    Par stargatejojo dans le forum Windows Forms
    Réponses: 8
    Dernier message: 08/05/2006, 11h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo