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 :

Variable globale de type tableau de chaines


Sujet :

C#

  1. #1
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut Variable globale de type tableau de chaines
    Bonjour,

    Projet C#, winforms

    je cherche à créer une variable globale accessibles à tous mes objets, permettant dans un premier temps de récupérer le tableau "args" des arguments de la ligne de commande et d'en injecter d'autres dans ce même tableau au besoin.

    J'ai tenté de créer ceci :


    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Data.Sql;
    using System.Data.SqlClient;
     
    namespace Films
    {
        public sealed class globals
        { public string[] parametres; }
     
        static class Program
        {
            /// <summary>
            /// Point d'entrée principal de l'application.
            /// </summary>
            [STAThread]
     
            static void Main(string[] args)
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
     
                globals.parametres prn = new globals.parametres;
                prn := args;
    Évidemment rien ne marche.

    Mon but est de récupérer des paramètres en ligne de commande du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonApplication.exe -S"toto" -U"titi" -D"tata"
    Et donc d'avoir si possible un tableau à double entrée code/valeur

    Quelqu'un aurait-il la bonté de m'expliquer comment faire ?

    Merci
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    Après moult essais, j'ai réussi à faire ça :
    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
     
    namespace Films
    {
        public sealed class globals
        { public string[] parametres; }
     
        static class Program
        {
            /// <summary>
            /// Point d'entrée principal de l'application.
            /// </summary>
            [STAThread]
     
     
     
            static void Main(string[] args)
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
     
                globals prm = new globals();
                prm.parametres = args;
    Mais dans une "form" appelée par la "form" MAin, args n'est pas reconnu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
           private void ConnexionForm_Activated(object sender, EventArgs e)
            {
                globals prm = new globals();
                prm.parametres = Main.args;
    ça pêche sur le main.
    J'ai essayé args, Films.Main.args... (le projet s'appelant Films.


    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    salut

    normalement, avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Environment.CommadLine()
    tu auras ton bonheur
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    Ok, j'ai fait ça dans Main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                globals prm = new globals();
                prm.parametres = args;
    ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                prm.parametres = Environment.GetCommandLineArgs();
    mais je ne peut toujours l'utiliser que localement !

    Je veut pouvoir avoir accès à ma variable prm quelqu'en soit le nom dans toutes les "forms" !

    Or je n'ai aucun accès dans une Forms intitulé Forms1.cs.... à un quelconque objet de global, ni parametres, ni prm...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    tu mets ta variable static dans la class program en ayant déclarer en public ton objet

    et normalement, PARTOUT, tu pourrais faire:

    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    Ceci semble coller :

    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
    namespace Films
    {
     
        // ### ma classe pour stocker mes variables globales (tableau de lignes)
        public sealed class globals
        { public string[] parametres; }
     
        static class Program
        {
            // ### mes variables globales sont stockées dans ce tableau
            static globals prm = new globals();
     
            /// <summary>
            /// Point d'entrée principal de l'application.
            /// </summary>
            [STAThread]
     
            static void Main(string[] args)
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
     
                /// ### mon tableau de variables globales est alimentée par la ligne de commande, méthode 1 :
                prm.parametres = args;
                /// ### mon tableau de variables globales est alimentée par la ligne de commande, méthode 2 :
                prm.parametres = Environment.GetCommandLineArgs();
    OK, mais comment l'utiliser dans mon autre form ????

    J'ai essayé :
    prm
    prm.parametres
    Program.prm
    Film.Program.prm
    Program.prm.parametres
    Film.Program.prm.parametres
    ....

    Rien ne marche

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    public static pour tes classes sinon elles ne seront pas visibles ailleurs !!!
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    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
    39
    40
    41
    42
    43
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Data.Sql;
    using System.Data.SqlClient;
     
    namespace Films
    {
     
        // ### ma classe pour stocker mes variables globales (tableau de lignes) -S"" -U vide = Windows -D"database"
        public sealed class GLOBALS
        {
            public string[] PARAMETRES;
        }
        public sealed class STRINGS
        { 
          public string SQL_SERVER_NAME;    // nom du serveur cible
          public string SQL_DATABASE_NAME;  // nom de la base cible
          public string SQL_USER;           // ### si vide => sécurité intégré (compte de connexion Windows courant), sinon, nom de connexion SQL
        }
     
        public static class Program
        {
            // ### mes variables globales sont stockées dans ce tableau
            public static GLOBALS prm = new GLOBALS();
            public static STRINGS str = new STRINGS();
     
            /// <summary>
            /// Point d'entrée principal de l'application.
            /// </summary>
            [STAThread]
     
            static void Main(string[] args)
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
     
                // ### mon tableau de variables globales est alimentée par la ligne de commande, méthode 1 :
                prm.PARAMETRES = args;
                // ### mon tableau de variables globales est alimentée par la ligne de commande, méthode 2 :
                prm.PARAMETRES = Environment.GetCommandLineArgs();

    Je ne voit toujours pas ou faire cela.

    j'ai tenté ce nouveau code... mais pas mieux.

    C'est sympa de dire qu'il faut rajouter public... mais si tu me dit pas ou, ça me sert à rien !

    En sus dans la suite de mon code, la méthode Lenght() appliquée à mon tableau n'est pas fonctionnelle. L'erreur de compilation est :
    "Erreur CS1955 Impossible d'utiliser un membre 'Array.Length' ne pouvant pas être appelé comme une méthode."


    Le code étnt :
    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
     
               for (int i = 1; i < prm.PARAMETRES.Length(); i++)
                {
                    if (prm.PARAMETRES[i].Substring(1, 2) == "-S")
                    { str.SQL_SERVER_NAME = prm.PARAMETRES[i].Substring(1, prm.PARAMETRES[i].Length() - 1);
                      str.SQL_SERVER_NAME = str.SQL_SERVER_NAME.Replace("\"", "");
                    };
                    if (prm.PARAMETRES[i].Substring(1, 2) == "-U")
                    { str.SQL_USER = prm.PARAMETRES[i].Substring(1, prm.PARAMETRES[i].Length() - 1);
                      str.SQL_USER = str.SQL_USER.Replace("\"", "");
                    };
                    if (prm.PARAMETRES[i].Substring(1, 2) == "-U")
                    { str.SQL_DATABASE_NAME = prm.PARAMETRES[i].Substring(1, prm.PARAMETRES[i].Length() - 1);
                      str.SQL_DATABASE_NAME = str.SQL_DATABASE_NAME.Replace("\"", "");
                    };
     
                }
    BON là erreur rectifié, c'est pas la méthode Length() mais la propriété !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    Bon, ça y est, j'y suis arrivé :

    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 void ConnexionForm_Activated(object sender, EventArgs e)
            {
              for (int i = 0; i < Program.prm.PARAMETRES.Length; i++)
              { LBX_args.Items.Add(Program.prm.PARAMETRES[i]); };
     
                // ### recomposition de la chaine de connexion
                Program.CNS = "Data Source=" + Program.str.SQL_SERVER_NAME + ";Initial Catalog=" + str.SQL_DATABASE_NAME;
                if (Program.str.SQL_USER == "")
                { Program.CNS = Program.CNS + ";Integrated Security=true"; }
                else
                { Program.CNS = Program.CNS + ";User ID=" + Program.str.SQL_USER; };
     
     
            }
    Ce code dans ma seconde "form" semble marcher....

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  10. #10
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Tu peux aussi utiliser String.StartsWith, cela t’évitera quelques exceptions.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool ret = "abc".StartsWith("AB", StringComparison.InvariantCultureIgnoreCase);
    https://msdn.microsoft.com/fr-fr/lib...vs.110%29.aspx

Discussions similaires

  1. Créer une variable globale de type tableau
    Par beegees dans le forum Langage
    Réponses: 1
    Dernier message: 27/10/2008, 00h26
  2. [E-03] Utiliser une variable globale de type Const pour mes colonnes
    Par Mimosa777 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 23/10/2008, 20h48
  3. [c#][asp.net]variable de session type tableau multidim
    Par chorokari dans le forum ASP.NET
    Réponses: 4
    Dernier message: 18/07/2008, 22h34
  4. [Tableaux] Une variable dynamique de type tableau
    Par martin__ dans le forum Langage
    Réponses: 3
    Dernier message: 02/08/2007, 19h22
  5. Réponses: 2
    Dernier message: 10/12/2006, 09h57

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