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#]Catalogue accessible pour toute une appli


Sujet :

Windows Forms

  1. #1
    Membre chevronné Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Points : 2 145
    Points
    2 145
    Par défaut [C#]Catalogue accessible pour toute une appli
    Bonjour,
    Je cherche à me créer un System.Collections.Generic.Dictionnary<string,string> en objet globale, que je remplit pendant le load de mon main et auquel je peut accèder depuis toute les forms de mon appli.
    Malheureusement on tourne en rond depuis plus de 2h maintenant et impossible de résoudre cela.
    On a essayé de passer par les Properties.Settings mais impossible d'avoir un objet de type Dictionnary...

    Merci beaucoup pour votre aide.
    Alexandre Chemla - Consultant MS BI chez Masao

  2. #2
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Salut .

    dans n'importe quelle classe de ton app (mais de préférence dans une classe dédiée) tu fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    private static Dictionnary<string,string> dico;
     
    public static Dictionnary<string,string> Dico
    {
         get
         {
              return dico;
         }
    }
    pour y accéder :
    - MVP C#
    -Tout problème a une solution, le vrai problème est de trouver la solution .....
    - Linux & mono : l'avenir

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 238
    Points : 269
    Points
    269
    Par défaut
    L'option de la classe static dédié est la meilleur je pense.
    Je l'utilise dans mon projet actuel sous cette forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public static class HexaWorker
    {
          public static int calculADeuxBalles(int a, int b)
          {
                 return a + b;
          }
    }
    De cette manière si ta classe est dans le même namespace tu peux appeler ta fonction comme ca ---> HexaWorker.calculADeuxBalles(3,3);
    L'avantage des classes static est que tu as pas besoin de les instancier pour les utiliser donc c'est plus pratique. Après à toi d'implémenter les différentes méthodes, propriétés, attributs dont tu as besoin dans cette classe.
    Bonne chance
    « L’erreur est humaine, mais un vrai désastre nécessite un ordinateur »

  4. #4
    Membre chevronné Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Points : 2 145
    Points
    2 145
    Par défaut
    Merci pour la méthode j'essaie ça demain et je vous tiens au courant si je cale
    Alexandre Chemla - Consultant MS BI chez Masao

  5. #5
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Citation Envoyé par Biloutor
    L'option de la classe static dédié est la meilleur je pense.
    Je l'utilise dans mon projet actuel sous cette forme
    hummmmm. la classe statique n'existe pas. En dotnet ce n'est qu'une maniere de mettre un constructeur "super privé". Et ta méthode reviens exactement à la mienne puisque dans ta classe "statique" tu déclares une variable statique.
    Et comme toute variables, propriétés, méthodes statiques, il n'y a pas besoin d'instancier la classe pour y avoir accès même si la classe n'est pas marqué comme statique. Après c'est une question d'organisation et de choix personnel (personnellement j'ai tendance à effectivement regrouper les méthodes statiques et les variables statiques dans une classe marquée statique mais c'est un choix personnel.)

    Il faut bien comprendre ce que ça implique derrière et ce que ça veut dire.
    - MVP C#
    -Tout problème a une solution, le vrai problème est de trouver la solution .....
    - Linux & mono : l'avenir

  6. #6
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    hummmmm. la classe statique n'existe pas.
    Effectivement. La classe static n'est qu'un "contrat" qui indique que TOUS les membres de la classe doivent être marqué comme static.
    Mais avec une classe non static et des membres uniquement static, on obtient EXACTEMENT le même résultat.

  7. #7
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Citation Envoyé par guitoux1
    Effectivement. La classe static n'est qu'un "contrat" qui indique que TOUS les membres de la classe doivent être marqué comme static.
    Mais avec une classe non static et des membres uniquement static, on obtient EXACTEMENT le même résultat.
    c'est ce que j'ai dit non ?
    - MVP C#
    -Tout problème a une solution, le vrai problème est de trouver la solution .....
    - Linux & mono : l'avenir

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 238
    Points : 269
    Points
    269
    Par défaut
    Dev01 Je suis tout à fait conscient que la méthode que j'ai donné est similaire à la tienne, c'etait juste pour apporter une précision à Jinroh77sur l'utilisation de méthodes statiques.

    Par contre je ne comprend pas trop ta réflexion sur l'inéxistance de classe statique et de constructeur "super-privé".

    Une classe statique est pour moi un moyen de regrouper uniquement des méthodes et attributs statiques. De plus, il n'existe pas de constructeur pour les "class statique" puisqu'elles ne sont pas instanciable !
    Chaqu'un son utilisation des outils mis à notre disposition, mais utiliser des attributs statiques dans une classe non statiques est un peu crad selon moi.
    « L’erreur est humaine, mais un vrai désastre nécessite un ordinateur »

  9. #9
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Citation Envoyé par Biloutor
    Par contre je ne comprend pas trop ta réflexion sur l'inéxistance de classe statique et de constructeur "super-privé".
    Compil ta classe, prend un décompilateur (genre Reflector et regarde comme il te sort la définition de la classe. Tu verras que rien n'indique qu'elle est statique . Et pour cause ce n'est qu'une astuce de C# pour oblibger a n'avoir que des membre statique dedans. En aucun cas cela a un sens au niveau objet de la chose. Pour le constructeur "super privé" c'est une manière de dire que même dans la classe tu n'y a pas accès.

    Pour ce qui est de mettre des méthodes statiques dans des classes qui ne le sont cela est parfaitement correcte. Tu as parfois besoin de méthode qui se rapporte à une classe mais pas une instance de la classe. L'exemple le plus simple sont les opérateurs. Si tu regardes comme ils sont déclarés, tu verras que tout est public static operator.
    - MVP C#
    -Tout problème a une solution, le vrai problème est de trouver la solution .....
    - Linux & mono : l'avenir

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 238
    Points : 269
    Points
    269
    Par défaut
    Ok merci pour ces renseignements
    « L’erreur est humaine, mais un vrai désastre nécessite un ordinateur »

  11. #11
    Membre chevronné Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Points : 2 145
    Points
    2 145
    Par défaut
    Merci à tous pour tous ces renseignements et votre aide
    J'étais en train d'essayer d'utiliser mon Dictionnaire mais je me retrouve face à 2 petit problèmes.

    Voila ce que j'ai créée :
    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
     
        public class clCatalogue
        {
            private static Dictionary<string, clAttribut> cCatalogue;
     
            //getter du catalogue
            public static Dictionary<string, clAttribut> cpCatalogue
            {
                get { return cCatalogue; }
            }
     
            public string GetNameCat(string TheKey)
            {
                clAttribut LaSortie = new clAttribut();
                cpCatalogue.TryGetValue(TheKey, out LaSortie);
                try
                {
                    return LaSortie.spLibelle;
                }
                catch (NullReferenceException)
                {
                    MessageBox.Show("La référence " + TheKey + " n'existe pas dans le catalogue");
                    return null;
                }
            }
     
            public void RemplirCatalogue()
            {
                clConnection connection = new clConnection();
                string strRequete = "Select distinct isnull(NAME, 'NA') AS toto, isnull(REMARKS, 'NA'), isnull(COLTYPE, 'NA'), isnull(TBNAME, 'NA'), isnull(LENGTH, 0)  from sy0_col where nrid in (select max(nrid) name from sy0_col group by name) order by toto DESC";
                SqlCommand command = new SqlCommand(strRequete, connection.getCurseur());
                SqlDataReader reader = command.ExecuteReader();
     
                while (reader.Read())
                {
                    string name = reader.GetString(0);
                    clAttribut UnAttribut = new clAttribut(reader.GetString(1), reader.GetString(2), reader.GetString(3), reader.GetInt32(4));
                    cpCatalogue.Add(name, UnAttribut);
                }
                reader.Close();
            }
        }
    Premièrement mon dictionnaire est en fait un
    Dictionary<string, clAttribut> avec clAttribut une classe contenant la liste des attributs correspondant à ma clef.
    Evidement clAttribut était une classe private.
    J'ai du la passer en public car le compilateur ne comprenanit pas pourquoi mon
    clAttribut était moins accessible que le cpCatalogue.
    Bon à la rigueur n'est pas trop grave.

    L'autre problème est que je cherche donc à remplir le catalogue une seul fois et à ne faire ensuite qu'un appel vers e catalogue en utilisant différentes méthodes de retour d'information.

    Je m'embrouille encore un petit peu.
    Merci pour votre soutien.
    Alexandre Chemla - Consultant MS BI chez Masao

Discussions similaires

  1. Réponses: 11
    Dernier message: 05/04/2010, 22h10
  2. Réponses: 3
    Dernier message: 27/04/2005, 17h52
  3. Quels outils pour dvper une appli de gestion Full Web ?
    Par Neva dans le forum Général Conception Web
    Réponses: 8
    Dernier message: 18/03/2005, 18h56
  4. Capter un evenement de souris pour toute l'appli
    Par tmorel dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 02/12/2004, 00h12
  5. MSDE pour commercialiser une appli.
    Par tiboleo dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 21/10/2003, 08h50

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