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 :

[intellisens] Enum en C# et en VB


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut Enum en C# et en VB
    Bonjour,

    J'ai un petit souci pour accéder à des enums dans l'IDE.

    Exemple de code VB :
    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
     
    class machin 
    {
        private enum entrucs
            valeur1
            valeur2
        end enum
     
        private _trucs as entrucs
     
        public readonly property Trucs as entrucs
            get { return _trucs }
     
        public sub New()
            _trucs = new entrucs
        end sub
    }
    En C#
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class machin 
    {
        private enum entrucs
        { valeur1,valeur2 }
     
        private entrucs _trucs
     
        public readonly entrucs Trucs
        {
            get { return _trucs }
        }
    }
    Ca marche en VB, pas en C#

    Qu'est-ce que je loupe ?

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Ca veut dire quoi "ca marche pas en C#" ? Message d'erreur ?

    Sinon, petites remarques:
    dans ton code, Trucs est en readonly mais ce n'est pas nécessaire si tu n'implémentes pas le set dans la propriété De plus, _trucs est déclaré mais on ne lui affecte pas de valeur.....

  3. #3
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Oui, j'ai fait ça un peu vite avant d'aller manger.
    Le readonly ne doit même pas être valable en C#.

    Je corrige le pseudo code :

    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
    class machin 
    {
        private enum entrucs
        { valeur1,valeur2 }
     
        private entrucs _trucs;
     
        public entrucs Trucs
        {
            get { return _trucs }
        }
     
        machin()
        { _trucs = new entrucs(); }
     
    }
    J'ai rajouté un constructeur, mais en fait ce n'est pas vraiment là mon problème.
    C'est plutôt à l'édition du code. Lorsque je dis que ça marche ou pas, j'entendais "avec intellisens".
    Dans le code VB, je peux entrer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monObjet.Trucs.valeur1
    Valeur1 est proposée par intellisens. Pratique.
    Et c'est là qu'il y a différence avec C#, qui ne me propose pas ce choix dans l'énumération.

    Il s'agit d'un code que j'entre de mémoire, je mettrais le vrai code qui fonctionne en VB ce soir.

  4. #4
    Membre confirmé Avatar de Ingham
    Profil pro
    Inscrit en
    Août 2002
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 156
    Par défaut
    Ta propriété est en ReadOnly (pas de set), donc tout ce que tu peux faire avec c'est des comparaisons, et ca se passe comme ç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
    public enum EnTrucs
    {
        valeur1,
        valeur2
    }
    public class machin 
    {
        private EnTrucs _trucs
     
        public EnTrucs Trucs
        {
            get { return _trucs }
        }
    }
    et la comparaison:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(MonMachin.Trucs == EnTrucs.valeur1)
    {
        //Code
    }

  5. #5
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Je pense comme Ingham: pour moi, il s'agit d'une fonctionnalité du l'IDE pour C#, qui permet de proposer des résultats uniquement au bon endroit....

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 104
    Par défaut
    Bonjour,

    J'ajouterai que l'énum est définie en "private" dans la classe (également privée par défaut) et que la propriété Trucs est public ... bref le "pseudo code", comme tu dis, en C# ne doit pas marcher.

    sinon le code de Ingham doit très bien marcher.

  7. #7
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Citation Envoyé par Ingham
    Ta propriété est en ReadOnly (pas de set), donc tout ce que tu peux faire avec c'est des comparaisons
    Oui aussi.
    En fait, je veux l'utiliser pour accéder à l'index des colonnes d'une datatable de façon parlante (je préfère coder [colonnes.identifiant] plutot que [0]).
    Et j'aimerais deux choses, si c'est possible :

    que ma classe ressemble plutôt à cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class DefTable
    {
        public enum EnColonnes {  identifiant, valeur }
        private EnTrucs _colonnes;
        public EnTrucs Colonnes
        {  get { return _colonnes; }  }
    }
    Et ensuite qu'intellisens fonctionne au niveau de l'auto complétion lorsque j'entre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    objTable.Columns[(int)objDef.Colonnes.identifiant]
    un enum doit être casté en int à l'utilisation il me semble.

  8. #8
    Membre confirmé Avatar de Ingham
    Profil pro
    Inscrit en
    Août 2002
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 156
    Par défaut
    Je comprends pas l'interet, tu veux acceder aux valeurs d'un enum, sans passer par cet enum mais par une variable l'utilisant ? Je trouve ca totalement illogique.

    Pour "caster en int" un enum, il faut faire comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    [Flags]
    public enum Colones
    {
      valeur1 = 0,
      valeur2 = 1,
      valeur3 = 2
    }
    Et mets ca en dehors de ta classe.

    Accessoirement tu risque de te compliquer la vie en utilisant un enum au lieu des index... Supposons que ta table change pour un raison X, tu vas être obligé d'aller modifier ton enum en fonctions, prise de tête....

Discussions similaires

  1. [MySQL] Récupérer les valeurs définies dans un champ ENUM
    Par Huntress dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 03/07/2010, 18h55
  2. [VB.NET] Variable de type enum avec du string
    Par Mouse dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/01/2005, 18h22
  3. [MySQL] Valeur par défaut d'un type ENUM
    Par aliasjcdenton dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 31/10/2004, 20h44
  4. enum??
    Par $grm$ dans le forum PostgreSQL
    Réponses: 10
    Dernier message: 23/04/2004, 16h34
  5. [TABLE][ENUM] u champs à choix multiple ?
    Par narmataru dans le forum SQL
    Réponses: 2
    Dernier message: 04/11/2003, 10h25

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