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 :

Passer d'une form à 2 form différents suivant la valeur d'une variable


Sujet :

C#

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Passer d'une form à 2 form différents suivant la valeur d'une variable
    Bonjour,

    Soyez indulgent pour un sexagénaire, newbie en C# !
    C'est mon premier programme
    Je n'ai pas trouvé de livre C# pour les nuls++

    J'essaye de faire un programme qui en fonction du click sur 2 boutons va ouvrir 2 forms différentes
    pour cela j'utilise une variable b qui sera testé dans le main,

    Dans la form1 je donne une valeur à b suivant le bouton cliqué :
    Dans la form1, J'ai ce message d'erreur, Pourtant la classe Perso est publique.
    Dans la classe Perso je crée un objet b, ma variable

    (désolé pour l'affichage du code, quand je prévisualise les tabulations n'apparaissent pas ?)

    Error 1 The name 'b' does not exist in the current context

    Program.cs

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Windows.Forms;
     
    namespace MotDePasse
    {
        public class Perso
        {    
            public int variables;
        }
     
        static class Program
        {
            /// <summary>
            /// The main entry point for the application.
            /// </summary>
     
            [STAThread]
     
            static void Main()
            {
                Perso b = new Perso();
                b.variables = 0;
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
                if (b.variables == 0)
                {
                    Application.Run(new Form2());
                }
                else
                {
                    Application.Run(new Form3());
                }
            }
        }
    }

    Form1.cs

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace MotDePasse
     
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
     
            private void button2_Click(object sender, EventArgs e)
            {
                //lorsque le bouton est appuyé on ferme la fenetre et affiche fenetre 2        
                b.variables = 0;
                this.Close();
            }
     
            private void button3_Click(object sender, EventArgs e)
            {
                //lorsque le bouton est appuyé on ferme la fenetre et affiche fenetre 3  
                b.variables = 1;
                this.Close();
            }
        }
    }

  2. #2
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    Bonjour,

    Alors première chose utilise les balises CODE (le bouton #) pour encadrer ton code, de manière à ce que ça soit lisible.
    Seconde petite chose, utilise des noms de variables plus parlant, b et variables c'est pas top.

    Dans ta Form2, b n'est pas visible et c'est normal puisque c'est une variable dont la portée est juste au niveau de ta méthode Main().
    Voilà une solution simple pour que b puisse être utilisé dans ta Form2 (il y en a d'autre, mais c'est la plus simple).

    Dans ta Form2, tu créé une variable de type Perso et modifie le constructeur pour qu'il accepte un paramètre de type Perso :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private Perso _perso;
    public Form2(Perso perso)
    {
        InitializeComponent();
        _perso = perso;
    }
    Maintenant dans ta Form2, tu a accès à _perso.variables.

    Et pour reprendre ton code d'appel avec ma modif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Run(new Form2(b));
    Il y a de bon tuto sur le site que je te conseil vivement de lire : http://tahe.developpez.com/dotnet/csharp/

    Bonne continuation
    L’aléatoire n’existe pas en informatique, c’est juste un moyen de dire que l’on a pas encore compris.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci Kyroon,
    J'avoue avoir du mal à comprendre le code pourtant "si simple" que tu m'as envoyé !
    Je ne vois pas de rapport avec la variable b que tu utilises ici :
    Application.Run(new Form2(b));
    il faut que je parcoure le tuto csharp2008.pdf

  4. #4
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    Bonjour,

    La variable b est celle que tu as instanciée dans ta méthode Main. Comme sa portée est uniquement dans la méthode Main, il faut la passer à ta Form2 pour qu'elle la connaisse.
    C'est exactement ce qu'il se passe quand on fait : new Form2(b) on instancie une Form2 en lui passant b (de type Perso) en paramètre, avec le nouveau constructeur de Form2 que j'ai fait qui attend un paramètre de type Perso.

    Concernant Form2, j'ai un nouveau constructeur qui attend une variable de type Perso et qui s'appellera perso. Seulement toujours à cause de la portée (ou grâce), perso ne sera utilisable que dans ce constructeur, c'est pour cela que j'ai ajouté une variable privée à la Form (_perso) qui elle sera visible dans toute ta Form, et dans le constructeur, j'assigne simplement perso à _perso.

    Bonne continuation.
    L’aléatoire n’existe pas en informatique, c’est juste un moyen de dire que l’on a pas encore compris.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 233
    Points : 336
    Points
    336
    Par défaut
    Attention,

    Le "Main" est ton application en général.
    La navigation entre différentes forms n'a pas sa place dans le Main (dans ton cas).
    https://msdn.microsoft.com/fr-fr/lib...(v=vs.90).aspx

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Application.Run(new Form1());
                if (b.variables == 0)
                {
                    Application.Run(new Form2());
                }
                else
                {
                    Application.Run(new Form3());
                }
    A chaque fois, tu vas "lancer" une nouvelle application.
    Pour faire une analogie, c'est comme si à chaque fois que tu cliquais sur un lien dans une page web, ça t'ouvrait une autre fenêtre de navigation !
    "Hope for the best, but prepare for the worst."

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    J'avais bien essayé cette méthode dont tu me donnes le lien :
    Comment : afficher un formulaire à partir d'un autre formulaire (Visual C#)
    Mais quand j'ouvre la nouvelle form et que je ferme la form en cours tout se ferme
    je suis obligé de la cacher, je n'avais pas trouvé cela "élégant"
    Ma première form est une form d'authentification, donc un passage obligé,
    c'est pour cela que je l'avais laissée dans le main.

    Now it's the worst !

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Suite...
    En fait comme je pensais qu'il était simple de passer la valeur d'une variable dans une form
    j'ai initialisé b dans le main, dans la form1 suivant le clic sur 2 boutons je modifie b et retourne au main pour savoir quel formulaire ouvrir, form 2 ou 3.
    J'aurai du déclarer et initialiser la variable b directement dans la form1 et renvoyer sa valeur dans le main suivant les boutons "clickés". En fait les formulaires 2 et 3 n'ont pas besoin de connaitre la valeur de b.
    C'est vrai qu'avec cette façon de procéder je vais passer systématiquement par le main pour ouvrir de nouveaux formulaires.

Discussions similaires

  1. [10g] Comment lancer une requête sous forme de " forms"
    Par lionrouge2009 dans le forum Forms
    Réponses: 2
    Dernier message: 06/08/2013, 18h48
  2. Réponses: 7
    Dernier message: 28/01/2011, 16h45
  3. Réponses: 3
    Dernier message: 11/03/2010, 11h44
  4. [Débutant] Une css, des fonds différents suivant les pages
    Par Skyou dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 20/10/2008, 22h31
  5. Réponses: 3
    Dernier message: 23/04/2007, 11h55

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