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 :

Passage de variables entre windows form : variable globale ou accesseur ?


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 39
    Points : 63
    Points
    63
    Par défaut Passage de variables entre windows form : variable globale ou accesseur ?
    Bonjour,

    Pour récupérer la valeur d'un textbox d'un Windows Form à un autre, vous me conseillez quelle méthode ?

    1) Stocker sa valeur dans une variable globale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            public static string nom;
            private void btnApercu_Click(object sender, EventArgs e)
            {
                    nom = txtNom.Text; 
    }
    2) Créer un accesseur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      public string getNom()
    {
    return txtNom.Text;
    }
    Merci d'avance pour vos conseils !

  2. #2
    Membre habitué Avatar de lasrevinu
    Inscrit en
    Février 2010
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 215
    Points : 134
    Points
    134
    Par défaut Variable statique ou pasage de parametre
    En effet tu peu utiliser une variable statique accessible partout.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class Form1 : Form
    {
         internal static string monText; 
    }
    Ou bien un passage de parametre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class MyForm2 : Form
    {
        private Form1 monText;
     
        public Form2( MyForm1 monText)
        {
            this.monText= monText;
        }
    }
    voila, apres ca depend de ton application et ce que tu souhaite en faire.
    la deuxieme methode est plus robuste.

  3. #3
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Ou changer la property "Modifiers" du TextBox en Public ou internal.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  4. #4
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    En utilisant la méthode la plus classique, à savoir passer par une propriété. Il suffit de regarder tous les écrans de sélection quels qu'ils soient (sélection de fichier, de répertoire, ...) pour voir qu'ils fonctionnent sur ce principe et que c'est assez universel au final.

    Donc dans ton formulaire tu définis une propriété qui fait simplement un get
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public string Nom
    {
        get { return txtNom.Text; }
    }
    Et ensuite tu appelles la propriété pour récupérer la valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Form1 frm;
    ...
    string nom = frm.Nom;
    La propriété c'est la même chose que ton accesseur, sauf qu'en .Net on a une syntaxe pour ça. Tout du moins lorsque l'opération n'est pas gourmande, ne génère pas d'effet de bord, ... Mais c'est une autre histoire que de faire le choix entre l'utilisation d'une propriété ou d'une méthode.

    Il faut éviter si possible de modifier la visibilité des membres pour préserver l'encapsulation. Surtout sur les contrôles (vas-y que je te modifie le contrôle de l'extérieur ensuite histoire de prendre un raccourci et que c'est le bordel général à la fin). Mais après chacun fait ce qu'il veut
    Pas de questions techniques par MP

  5. #5
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Mais après chacun fait ce qu'il veut
    Bien que je propose la solution de la property "Modifiers" pour sa simplicité, je ne l'utilise jamais et je passe aussi par une property ou une fonction .
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 99
    Points : 122
    Points
    122
    Par défaut
    Je te conseille de séparer l'UI des données
    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
    21
    22
    23
     
    // La structure de données
    class Personne
    {
    String Nom(){ get; set;}
    ...
    }
     
    // L'UI met à jour la structure
    Form(Personne personne)
    {
    _personne = personne;
    }
     
    void txtNom_changed(object sender, eventargs e)
    {
    _personne.Nom = txtNom.Text;
    }
     
    // La seconde UI 
    Form2(Personne personne)
    {
    }

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 39
    Points : 63
    Points
    63
    Par défaut
    merci pour vos réponses, je vais essayer ça cet après midi

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2018
    Messages : 7
    Points : 6
    Points
    6
    Par défaut et en vb.net ?
    et en VB.NET ca donnerait quoi ????
    parce que moi le C# je connais pas...
    merci !

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

Discussions similaires

  1. Passage par variable entre 2 form
    Par Marie_7 dans le forum VB.NET
    Réponses: 5
    Dernier message: 15/04/2014, 23h39
  2. passage de 2 variables entre 2 forms
    Par thor76160 dans le forum C#
    Réponses: 2
    Dernier message: 26/05/2009, 10h26
  3. [résolut] Problème de passage de valeur entre Windows Form
    Par tribaleur dans le forum Windows Forms
    Réponses: 4
    Dernier message: 12/06/2007, 11h29
  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