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 :

winform exécutable avec 2 constructeurs [Débutant]


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Janvier 2005
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 534
    Par défaut winform exécutable avec 2 constructeurs
    bonjour

    j'ai réalisé un Winform puis compilé son exécutable sans souci
    dans le winform, j'ai deux constructeur pour la classe

    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
       public partial class WakeUp : Form
        {
    
            private Int16 tasksTodo;
    
            public WakeUp()
            {
                InitializeComponent();
                tasksTodo = 1;
            }
    
            public WakeUp(Int16 cTask)
            {
                InitializeComponent();
                tasksTodo = cTask;
            }
    
            private void WakeUp_Load(object sender, EventArgs e)
            {
            ...
            }
            
            ...
    j'ai donc 2 constructeurs, l'un avec paramètre l'autre sans

    Problème
    Si je lance l'exécutable sans paramètre, Wake-UP.exe, j'obtiens tasksTodo = 1 -> OK
    Si je lance l'exécuable avec un paramètre : Wake-UP.exe 2, alors tasksTodo = 1 aussi -> NOK

    Question :
    1 - Peut-être manque t-il quelque chose dans le code ?
    2 - Dans les deux cas, la suite sera WakeUpload(), n'est-ce pas ?

    cdt

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par Hepil Voir le message
    ...
    1 - Peut-être manque t-il quelque chose dans le code ?
    Tout à fait il manque quelque-chose : il faut que tu regardes dans le fichier "Program.cs" : le point d'entrée de l'application est la méthode "Main" de la classe "Program". Pour prendre en compte les paramètres d'une ligne de commande, il faut que tu mettes un argument de type "string[]" dans ta méthode "Main", et ces arguments seront dans le tableau. Il faudra alors appeler la bonne surcharge de ton constructeur de ta classe "WakeUp". D'ailleurs, dans la méthode "Main", tu vas constater qu'il y a actuellement l'appel du constructeur de "WakeUp" sans paramètres, alors il ne risquait pas d'afficher autre chose que "1".

    Citation Envoyé par Hepil Voir le message
    2 - Dans les deux cas, la suite sera WakeUpload(), n'est-ce pas ?
    Absolument, c'est l'un des événements qui est intercepté lorsque le programme va passer à "Application.Run" dans la méthode "Main".

  3. #3
    Membre éclairé
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Janvier 2005
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 534
    Par défaut
    Merci de ta réponse

    voilà ce que j'ai dans le program.cs :
    (Cela correspond bien à ce que tu me dis)

    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
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Windows.Forms;
     
    namespace AS400Exp
    {
        static class Program
        {
            /// <summary>
            /// Point d'entrée principal de l'application.
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new WakeUp());
            }
        }
    }
    mais je ne comprends pas où je dois mettre l'argument de type string, et pour quoi ce type alors que souhaite un argument(paramètre) de type short
    Peux-tu compléter un peu ton exemple ? stp

    Citation Envoyé par Ph_Gr Voir le message
    Bonjour,
    ... Pour prendre en compte les paramètres d'une ligne de commande, il faut que tu mettes un argument de type "string[]" dans ta méthode "Main", et ces arguments seront dans le tableau. Il faudra alors appeler la bonne surcharge de ton constructeur de ta classe "WakeUp".
    1 - où dois-je mettre l'argument de type string ?
    2 - de quel tableau parles-tu ?
    3 - comment et où appeler la bonne surcharge. Je pensais que cela était automatique ?

    cdt

    je proposerai cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            static void Main(string arg)
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
     
                if (arg == string.Empty) Application.Run(new WakeUp());
                else Application.Run(new WakeUp(Convert.ToInt16(arg)));
            }
    Qu'en penses-tu ?
    je teste ...

    ou plus cool :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            static void Main(string arg)
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
     
                Application.Run(arg == string.Empty ? new WakeUp() : new WakeUp(Convert.ToInt16(arg)));
            }

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Par défaut
    Salut,
    tu peux faire comme ça je pense :

    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
     
    static class Program
        {
            /// <summary>
            /// Point d'entrée principal de l'application.
            /// </summary>
            [STAThread]
            static void Main(string[] args)
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                if (args.Length == 0)// pas d'argument
                {
                    Application.Run(new Form1());
                }
                else if (args.Length == 1) // un argument
                {
                    Int16 tasksTodo = -1;
                    if (Int16.TryParse(args[0], out tasksTodo))
                    {
                        Application.Run(new Form1(tasksTodo));
                    }
                    else
                    {
                        throw new ArgumentException("Le paramètre index = 0 n'est pas un Int16 valide...");//par exemple...
                    }
                }
                else //n arguments
                {
                    throw new ArgumentException("Le programme ne supporte pas plus de 1 paramètre...");//par exemple...
                }
            }
        }
    A+

    EDIT = Ton code ne peut pas compiler. un point d'entrée d'app s'écrit comme cela : static void Main(string[] args) ou static void Main() si tu ne gère pas les arguments; ou static int Main(string[] args) si tu veux retourner un code succès ou erreur.

  5. #5
    Invité
    Invité(e)
    Par défaut
    J'allais mettre le code mais lead a été plus rapide.
    Et en plus il a mit du code plus propre que ce que j'allais faire.

    Si tu ne veux pas reprendre plusieurs fois, tu peux toujours faire comme cela :
    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
     
     
    static class Program
        {
            /// <summary>
            /// Point d'entrée principal de l'application.
            /// </summary>
            [STAThread]
            static void Main(string[] args)
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Form mainForm;
                if (args.Length == 0)// pas d'argument
                {
                    mainForm = new Form1();
                    //[EDIT] gros oubli, fallait pas l'instancier ici...
                    //Application.Run(new Form1());
                }
                else if (args.Length == 1) // un argument
                {
                    Int16 tasksTodo = -1;
                    if (Int16.TryParse(args[0], out tasksTodo))
                    {
                        mainForm = new Form1(tasksTodo);
                    }
                    else
                    {
                        throw new ArgumentException("Le paramètre index = 0 n'est pas un Int16 valide...");//par exemple...
                    }
                }
                else //n arguments
                {
                    throw new ArgumentException("Le programme ne supporte pas plus de 1 paramètre...");//par exemple...
                }
                Application.Run(mainForm);
            }
        }
    Dernière modification par Invité ; 28/04/2014 à 17h19.

  6. #6
    Membre éclairé
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Janvier 2005
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 534
    Par défaut
    Citation Envoyé par Ph_Gr Voir le message
    J'allais mettre le code mais lead a été plus rapide.
    Et en plus il a mit du code plus propre que ce que j'allais faire.

    Si tu ne veux pas reprendre plusieurs fois, tu peux toujours faire comme cela :
    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
     
    static class Program
        {
    ...
            static void Main(string[] args)
            {
    ...
                Form mainForm;
                if (args.Length == 0)// pas d'argument
                {
                    mainForm = new Form1();
                    Application.Run(new Form1());
                }
                else if (args.Length == 1) // un argument
                {
    ...
               }
                else //n arguments
                {
    ...
                }
                Application.Run(mainForm);
            }
        }

    Merci à toi
    A quoi sert d'instancier Mainform ?
    En ai-je besoin ici ?

    mon dernier code fonctionne

    un grand merci à vous tous et à moi-même aussi d'ailleurs, car j'ai rassemblé vos codes en un seul... celui qui fonctionne
    hahah


  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Hepil Voir le message
    Merci à toi
    A quoi sert d'instancier Mainform ?
    En ai-je besoin ici ?
    Très bien suivi! C'était un oubli de ma part!

  8. #8
    Membre éclairé
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Janvier 2005
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 534
    Par défaut
    bon je viens de coder tout cela en fonction de vos retours...

    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
            static void Main(string[] args)
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Int16 lg = Convert.ToInt16(args.Length);
                switch (lg)
                {
                    case 0:
                        // no parameter
                        Application.Run(new WakeUp());
                        break;
                    case 1:     // tasks
                        Int16 task = Convert.ToInt16(args[0]);
                        switch (task)
                        {
                            case 1:
                                Application.Run(new WakeUp(1));
                                break;
                            case 2:
                                Application.Run(new WakeUp(2));
                                break;
                            case 3:
                                Application.Run(new WakeUp(3));
                                break;
                            default:
                                // wrong value
                                break;
                        }
                        break;
                    default:
                        // to much parameters
                        break;
                }
     
            }
    maintenant je teste ...

  9. #9
    Membre éclairé
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Janvier 2005
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 534
    Par défaut
    Message of error:

    Erreur 1 Le programme 'D:\...\AS400Exp.exe' ne contient pas une méthode 'Main' statique appropriée pour un point d'entrée AS400Exp
    Citation Envoyé par lead8209 Voir le message
    Salut,
    tu peux faire comme ça je pense :
    ...

    A+
    merci à toi

    ok donc tu reprendrais tous le code de sélection (constructeur) dans program.cs
    Alors que moi j'aurais utilisé plutôt le code existant en appelant le constructeur existant (dans l'autre classe)

    du coup je ne sais plus ...

    je vais tester cela aussi

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

Discussions similaires

  1. Erreur d'exécution avec les Runtime
    Par denils dans le forum Runtime
    Réponses: 30
    Dernier message: 22/01/2015, 15h21
  2. Réponses: 6
    Dernier message: 28/11/2013, 11h55
  3. [Conception]Problèmes avec un constructeur dérivé
    Par Le Furet dans le forum Langage
    Réponses: 6
    Dernier message: 10/03/2006, 09h44
  4. Problème d'exécution avec Dec C++
    Par PNL dans le forum C
    Réponses: 20
    Dernier message: 02/10/2005, 03h59
  5. Problème à l'exécution avec wxWindows (compilé avec BCC55)
    Par ShootDX dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 14/11/2003, 18h04

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