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

C# Discussion :

communication entre form


Sujet :

C#

  1. #1
    bul
    bul est déconnecté
    Membre confirmé Avatar de bul
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 195
    Par défaut communication entre form
    bonjour à toutes et à tous,

    "MainForm" :
    une form qui en appelle une autre
    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
     
    using System;
    using System.Collections.Generic;
    using System.Drawing;
    using System.Windows.Forms;
    namespace comfen
    {   public partial class MainForm : Form
        {   public String txt="exemple";
            public MainForm()
            {   InitializeComponent();        }
            void Button1Click(object sender, EventArgs e)
            {   Form1 frm1 = new Form1();
                frm1.ShowDialog();
            }
        }
    }
    Form1 : la form appelée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    using System;
    using System.Drawing;
    using System.Windows.Forms;
    namespace comfen
    {   public partial class Form1 : Form
        {   public Form1()
            {  InitializeComponent();
            }
        }
    }
    puis-je y faire référence à la variable txt de la form parente ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    textBox1.Text=MainForm.txt;
    par exemple, donne l'erreur
    Une référence d'objet est requise pour la propriété, la méthode ou le champ non statique 'comfen.MainForm.txt'
    et ce sans passer cette variable lors de l'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1 frm1 = new Form1(txt);
    suis-je clair ?
    merci d'avance.

  2. #2
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Ben, le plus évident est de passer en paramètre ton txt soit dans le constructeur de Form1 soit dans le showDialog...
    Je ne vois pas ou est le problème sinon...

  3. #3
    bul
    bul est déconnecté
    Membre confirmé Avatar de bul
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 195
    Par défaut
    >>...passer en paramètre...
    certes, certes...
    merci pour la réponse ppphil,
    je me demandais si c'était la seule possibilité.
    dans certains cas de figures ce serait bien
    plus simple de faire référence aux "données"
    de la form appelante "directement"
    @+

  4. #4
    Membre émérite Avatar de bizet
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2005
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 717
    Par défaut
    Si tu as de trop nombreux paramètres, passe la form mère en paramètre.

  5. #5
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 24
    Par défaut
    Ce message d'erreur est tout à fait normal.
    Pourquoi ne pas rendre le champ statique ?
    De plus, rien ne t'oblige à déclarer ce champ dans une classe...

  6. #6
    bul
    bul est déconnecté
    Membre confirmé Avatar de bul
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 195
    Par défaut
    merci les gars,

    mais quand on découvre : pas si simple !

    1° @ bizet
    passer la form en paramètres ?
    why not ?... comment ?
    Form1 frm1 = new Form1(this ou quoi ???? );
    et dans Form1 ??? comment utiliser txt ?

    2° @ LiveFromBx
    Pourquoi ne pas rendre le champ statique ?
    De plus, rien ne t'oblige à déclarer ce champ dans une classe...
    oui et ? comment on fait ?
    sur l'exemple donné ?

    @+

  7. #7
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 24
    Par défaut
    Ce problème devrait être résolu simplement en lui rajoutant un "static", comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static String txt="exemple";
    Sinon essaie en déclarant ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public String txt="exemple";
    en dehors de la déclaration de ta classe, avec un "static" aussi éventuellement.

  8. #8
    bul
    bul est déconnecté
    Membre confirmé Avatar de bul
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 195
    Par défaut
    en dehors de la déclaration de ta classe
    incapable de trouver où et comment !
    navré du niveau où j'en suis
    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    namespace comfen
    {  public String txt="exemple";
        public partial class MainForm : Form
        { ...
    avec ou sans static :
    Class, delegate, enum, interface ou struct attendu

  9. #9
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 24
    Par défaut
    Ha oui, effectivement ça ne fonctionne pas en dehors de la classe. Je croyais l'avoir déjà fait...
    En dans la classe mais avec un "static", ça fonctionne ?

  10. #10
    bul
    bul est déconnecté
    Membre confirmé Avatar de bul
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 195
    Par défaut
    je n'avais pas répondu à tout,
    enfin... pas très clairement, mais
    tant mieux au fond ;o) puisque en refaisant
    des essais ça semble baigner, j'avais du
    mal tester !

    MainForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
        public partial class MainForm : Form
        {  public static String txt="exemple";
            public MainForm()
    ...
    form1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
               textBox1.Text=MainForm.txt;
    ...
    je vais appliquer à mon vrai code
    merci à vous.

  11. #11
    Membre émérite Avatar de bizet
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2005
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 717
    Par défaut
    Citation Envoyé par bul Voir le message
    why not ?... comment ?
    Form1 frm1 = new Form1(this ou quoi ???? );
    et dans Form1 ??? comment utiliser txt ?
    @+
    je ne sais pas si ca fonctionne mais jaurais fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MyForm myNewForm = new MyForm (this)
    et dans ma form Fille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    private MasterForm mymasterForm;
     
     
    ...
     
    public MyForm(MasterForm masterForm)
    {
    mymasterForm = masterForm;
    }
     
    ...
     
    masterForm.MyTextBox.Text...
    Mais pas certain que ca fonctionne et ca va te faire "grossir" ta form fille et donc prendre de la place en RAM.

  12. #12
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Attention tout de même, une propriété statique aura la même valeur dans toutes les instances de MainForm !!!!!!
    Cela veut dire que si tu fais une deuxième instance de MainForm (un autre objet), la propriété txt aura la même valeur que dans la première.
    Il ne faut pas utiliser des propriétés statique sans savoir ce que l'on en fait.
    Si c'est juste pour simplifier le code, ce n'est pas à recommander.

    Si tu dois absolument avoir accès à toutes les propriétés de MainForm dans Form1, passe MainForm en paramètre du constructeur de Form1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    namespace comfen
    {   public partial class Form1 : Form
        {   
            private MainForm mainForm
            public Form1(MainForm aMainForm)
            {  
              mainForm = aMainForm
              InitializeComponent();
            }
        }
    }

  13. #13
    bul
    bul est déconnecté
    Membre confirmé Avatar de bul
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 195
    Par défaut
    merci à tous,
    je note "résolu" même si d'autres réponses
    très instructives arrivent encore.
    @+

  14. #14
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Citation Envoyé par bizet Voir le message
    Mais pas certain que ca fonctionne et ca va te faire "grossir" ta form fille et donc prendre de la place en RAM.
    Jusqu'à nouvel avis, le paramètre MainForm n'est qu'une référence.... donc 32 bits

  15. #15
    Membre émérite Avatar de bizet
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2005
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 717
    Par défaut
    Citation Envoyé par ppphil Voir le message
    Jusqu'à nouvel avis, le paramètre MainForm n'est qu'une référence.... donc 32 bits
    Effectivement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. communication entre 2 forms
    Par bellak dans le forum Windows Forms
    Réponses: 6
    Dernier message: 04/08/2008, 15h46
  2. communication entre forms
    Par jadey dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 09/08/2006, 16h58
  3. [C#] Communication entre FORM
    Par kooljy dans le forum Windows Forms
    Réponses: 3
    Dernier message: 15/06/2006, 13h51
  4. communication entre forms
    Par Archimède dans le forum Langage
    Réponses: 10
    Dernier message: 13/10/2005, 18h05
  5. [VB.NET] Communication entre forms
    Par alex69 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 23/06/2005, 11h27

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