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 :

C# Passage de variable entre forms


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Homme Profil pro
    BAC +3
    Inscrit en
    Octobre 2018
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : BAC +3

    Informations forums :
    Inscription : Octobre 2018
    Messages : 164
    Points : 92
    Points
    92
    Par défaut C# Passage de variable entre forms
    Bonjour j'ai vu de nombreux topics à ce sujet mais je n'y comprends vraiment rien et je voulais savoir si quelqu'un pouvait m'expliquer avec un cas concret du type :

    Forms1 :

    Var Query = "Bonjour";

    Comment je récupère cette variable dans le Forms2 ?

    Merci d'avance

    BiRoy

  2. #2
    Candidat au Club Avatar de dedecodeur
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2018
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Comment souhaites-tu récupérer ta variable sur ta "Form 2" ? Avec un bouton, quand tu l'appelles,.. ?

  3. #3
    Membre régulier
    Homme Profil pro
    BAC +3
    Inscrit en
    Octobre 2018
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : BAC +3

    Informations forums :
    Inscription : Octobre 2018
    Messages : 164
    Points : 92
    Points
    92
    Par défaut
    Je souhaiterais la restocker dans une nouvelle variable pour l'utiliser à nouveau comme je veux.

    D'un point de vue personnel c'est la valeur d'une textbox du forms1 que je veux utiliser dans le forms2 dans une requête SQL.

  4. #4
    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
    Plusieurs solution s'offrent à toi.
    En voici déjà deux.

    Option 1 : passer ta chaîne dans le constructeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public partial class Form2 : Form
    {
        public Form2(string query)
        {
            InitializeComponent();
            _query = query;
        }
     
        private string _query;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    using (var f = new Form2(MaTextBox.Text)
    {
        f.ShowDialog();
    }
    Option 2 : déclarer une propriété sur Form2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
     
        public string Query { get; set; }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    using (var f = new Form2()
    {
        f.Query = MaTextBox.Text;
        f.ShowDialog();
    }

  5. #5
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 153
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Tout dépend généralement de qui appelle quoi : la Form2 est-elle ouverte par Form1 ? L'inverse ? Chacune est ouverte de son côté ?

    Si Form2 est appelée par Form1, alors il suffit de passer la valeur comme le propose popo.

    Si Form2 a appelé Form1, et souhaite récupérer le résultat, alors le plus simple est de créer une propriété sur Form1, et la lire depuis Form2.
    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    public partial class Form2 : Form
    {
        public string Resultat
        {
            get
            {
                return Textbox1.Text;
            }
            set
            {
                Textbox1.Text = value;
            }
        }
    }

    Et dans Form2 :
    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    using (var f = new Form1()
    {
        f.ShowDialog();
        string monResultat = f.Resultat;
    }

    En revanche, si les deux forms vivent leur vie chacune de leur côté, reste à savoir comment du veux gérer la chose... Form2 peut-elle vouloir accéder à Form1.Resultat sans que Form1 soit instanciée ? Form2 doit-elle être notifiée d'un changement de Form1.Resultat ?
    A ce moment tu pourras passer par exemple par un singleton ou autre variable globale qui stocke les handles des différentes form ouvertes, passer par des évènements, etc.
    On ne jouit bien que de ce qu’on partage.

  6. #6
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 153
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Petit exemple probablement très perfectible de synchro de la donnée entre form1 et form2 depuis une fenêtre MDI :
    FrmMain.cs : point d'entrée du programme, contient "checkBox1" et "checkBox2" :
    Code csharp : 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     
    using System;
    using System.Windows.Forms;
     
    namespace TestMDI
    {
        public partial class FrmMain : Form
        {
            Frm1 frm1 = null;
            Frm2 frm2 = null;
     
            public FrmMain()
            {
                InitializeComponent();
            }
     
            private void CheckBox1_CheckedChanged(object sender, EventArgs e)
            {
                bool open = (sender as CheckBox).Checked;
     
                if (open)
                {
                    if (frm1 == null)
                    {
                        frm1 = new Frm1();
                        frm1.FormClosed += Frm1_FormClosed;
                        frm1.TextPourFille2Changed += Frm1_TextPourFille2Changed;
                    }
                    frm1.Show();
                }
                else
                {
                    if (frm1 != null)
                    {
                        frm1.Close();
     
                        // Est-ce vraiment utile ?
                        frm1.FormClosed -= Frm1_FormClosed;
                        frm1.TextPourFille2Changed -= Frm1_TextPourFille2Changed;
                    }
                    frm1 = null;
     
                    if (frm2 != null)
                    {
                        frm2.TextDepuisFille1 = string.Empty;
                    }
                }
            }
     
     
            private void Frm1_FormClosed(object sender, FormClosedEventArgs e)
            {
                checkBox1.Checked = false;
            }
     
            private void CheckBox2_CheckedChanged(object sender, EventArgs e)
            {
                bool open = (sender as CheckBox).Checked;
     
                if (open)
                {
                    if (frm2 == null)
                    {
                        frm2 = new Frm2();
                        frm2.FormClosed += Frm2_FormClosed;
                    }
                    frm2.Show();
                    if (frm1 != null)
                    {
                        frm2.TextDepuisFille1 = frm1.TextePourFille2;
                    }
                }
                else
                {
                    if (frm2 != null)
                    {
                        frm2.Close();
                        frm2.FormClosed -= Frm2_FormClosed;
                    }
                    frm2 = null;
                }
            }
     
            private void Frm2_FormClosed(object sender, FormClosedEventArgs e)
            {
                checkBox2.Checked = false;
            }
     
            private void Frm1_TextPourFille2Changed(object sender, EventArgs e)
            {
                if (frm2 != null)
                {
                    frm2.TextDepuisFille1 = frm1.TextePourFille2;
                }
            }
        }
    }

    Frm1.cs : fille1. Contient textBox1
    Code csharp : 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    using System;
    using System.Windows.Forms;
     
    namespace TestMDI
    {
        public partial class Frm1 : Form
        {
            public delegate void TextPourFille2Handler(object sender, EventArgs e);
            public event TextPourFille2Handler TextPourFille2Changed;
     
            public Frm1()
            {
                InitializeComponent();
            }
     
            private void TextBox1_TextChanged(object sender, EventArgs e)
            {
                TextPourFille2Changed?.Invoke(this, new EventArgs());
            }
     
            public string TextePourFille2
            {
                get
                {
                    return textBox1.Text;
                }
            }
        }
    }

    Frm2.cs : fille 2. Contient label2 recevant le texte de Frm1.textBox1
    Code csharp : 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
    21
     
    using System.Windows.Forms;
     
    namespace TestMDI
    {
        public partial class Frm2 : Form
        {
            public Frm2()
            {
                InitializeComponent();
            }
     
            public string TextDepuisFille1
            {
                set
                {
                    label2.Text = value;
                }
            }
        }
    }
    On ne jouit bien que de ce qu’on partage.

  7. #7
    Membre régulier
    Homme Profil pro
    BAC +3
    Inscrit en
    Octobre 2018
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : BAC +3

    Informations forums :
    Inscription : Octobre 2018
    Messages : 164
    Points : 92
    Points
    92
    Par défaut
    Merci énormément pour vos réponses !! Elle sont toutes explicites et très claires , j'ai compris je vais m'entraîner à partie de ça ! Merci beaucoup

    Citation Envoyé par StringBuilder Voir le message
    Ton explication est très claire en fait l'idée dans mon cas c'est que l'utilisateur entre son identifiant sur la page de connexion (forms1) dans le text box. Une fois connectée il y'a un autre forms s'ouvre (forms2) qui s'ouvre et j'ai besoin ultérieurement pour une requête SQL de son identifiant . Donc je comptais récupérer l'identifiant entrée dans la textbox1 , le stocké dans une variable dans le forms1. Faire passer la variable dans le forms2 l'assignée à une nouvelle variable est écrire dans ma requète +MaNewVar +

    Citation Envoyé par popo Voir le message
    Mais quel partie de ce code est en relation avec le forms 1 ?

  8. #8
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 153
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par BiRoy Voir le message
    Ton explication est très claire en fait l'idée dans mon cas c'est que l'utilisateur entre son identifiant sur la page de connexion (forms1) dans le text box. Une fois connectée il y'a un autre forms s'ouvre (forms2) qui s'ouvre et j'ai besoin ultérieurement pour une requête SQL de son identifiant . Donc je comptais récupérer l'identifiant entrée dans la textbox1 , le stocké dans une variable dans le forms1. Faire passer la variable dans le forms2 l'assignée à une nouvelle variable est écrire dans ma requète +MaNewVar +
    Je ferais donc comme ceci :

    La form FrmLogin :
    Code csharp : 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
     
    public string Login
        {
            get
            {
                return Textbox1.Text;
            }
        }
     
    public string Password
        {
            get
            {
                return Textbox2.Text;
            }
        }

    Ensuite, dans la form principale FrmMain (sur événement Load, qui se produit avant l'affichage)
    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            private void FrmMain_Load(object sender, EventArgs e)
            {
                FrmLogin frmLogin = new FrmLogin();
                if (frmLogin.ShowDialog() == DialogResult.OK)
                {
                    label1.Text = frmLogin.Login;
                    label2.Text = frmLogin.Password;
                }
                else
                {
                    Close();
                }
            }

    Ainsi, tu récupères dans la FrmMain le login/pass, mais c'est bien FrmLogin qui s'affiche en premier
    On ne jouit bien que de ce qu’on partage.

  9. #9
    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
    Citation Envoyé par BiRoy Voir le message
    Mais quel partie de ce code est en relation avec le forms 1 ?
    Attention, tu as deux codes pour deux options différentes.

    Si tu choisi la première option le code à placer dans Form1 est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    using (var f = new Form2(MaTextBox.Text)
    {
        f.ShowDialog();
    }
    Si tu choisi la seconde option le code à placer dans Form1 est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    using (var f = new Form2()
    {
        f.Query = MaTextBox.Text;
        f.ShowDialog();
    }

    Dans les deux cas tu met le bout de code dans un bloc if (Je suis connecté) sur le clic du bouton "Se connecter"

  10. #10
    Membre régulier
    Homme Profil pro
    BAC +3
    Inscrit en
    Octobre 2018
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : BAC +3

    Informations forums :
    Inscription : Octobre 2018
    Messages : 164
    Points : 92
    Points
    92
    Par défaut
    Ok j'ai réussi merci à tous !!!!!

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

Discussions similaires

  1. passage de variables entre forms
    Par dgkourou dans le forum C#
    Réponses: 4
    Dernier message: 24/03/2013, 08h20
  2. Passage de variables entre Forms
    Par Tanoak_LaCapuche dans le forum C#
    Réponses: 3
    Dernier message: 19/04/2012, 10h53
  3. [vb net]passage de variable entre form !
    Par ChristopheOce dans le forum Windows Forms
    Réponses: 5
    Dernier message: 12/09/2006, 13h06
  4. [VB.Net][debutant]passage de variable entre windows form
    Par ChristopheOce dans le forum Windows Forms
    Réponses: 1
    Dernier message: 26/07/2006, 14h18
  5. [C#] Passage de variables entre 2 forms
    Par Tips dans le forum C#
    Réponses: 6
    Dernier message: 06/12/2005, 16h48

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