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 :

Créer un énum dynamique.


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut Créer un énum dynamique.
    Bonjour,

    Je pense que la question a déjà été posée, mais je ne trouve pas de réponse.

    C'est simple, je cherche a créer un enum dynamique.

    Explications :
    Je réalise un outil de configuration qui est en fait un Winform avec un propertyGrid.
    La propertyGrid est assez sympa car elle permet facilement de remplir la liste de choix possible à l'aide d'une variable de type Enum.
    Mais voilà, dans un cas particulier (celui de la langue par défaut du logiciel), la liste qui doit apparaitre dans la case est dynamique puisqu'elle s'appuie sur les fichiers de traduction présents.

    Donc, comment construire un Enum a partir d'une fonction (qui liste par exemple mes fichiers) puis utiliser cet Enum comme le type d'une variable que j'attache a un propertyGrid de la même façon que je le ferai avec un Enum simple ?

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 503
    Par défaut
    Vous prenez le problème par le mauvais bout.
    Il faut utiliser un TypeConverter
    http://msdn.microsoft.com/en-us/libr...e5(VS.71).aspx

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut
    Merci,

    J'essaie de regarder ca, mais je ne comprends pas trop (bon, en même temps, c'est Lundi matin.. .) .

    Un petit exemple serait le bienvenu..

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 503
    Par défaut
    Paragraphe :"Type Converters That Provide a List of Standard Values to a Property Grid"

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut
    Ca fonctionne !

    J'avoue n'avoir pas tout compris et y être aller à grand coup de copier-coller. Mais en tout cas, ca fonctionne nickel ...

    Ce que j'ai compris :
    Le converter prends la valeur sélectionnée, la compare avec les valeurs entrées dans la Collection.
    Ainsi, en travaillant simplement avec des valeurs en type de base, on peut gérer la correspondance avec une liste de valeurs.

    C'est vraiment top !

    Mon exemple :
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Windows.Forms;
     
    namespace TestPG_Enum
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                //Je crée mon object qui va gérer mes entrées dans le PropertyGrid
                PGElements ValeurSelect = new PGElements();
                //J'associe l'objet au propertyGrid pGtest
                pGtest.SelectedObject = ValeurSelect;
     
            }
        }
     
        /// <summary>
        /// La classe de l'objet que l'on veut voir dans le propertyGrid
        /// </summary>
        public class PGElements
        {
            private String selectedvalue = "Second";
     
            [TypeConverter(typeof(MainListConverter))] //On travaille avec le type de base String, mais il est lié au Converter MainListConverter
            public String TestString
            {
                get
                {
                    return this.selectedvalue;
                }
                set
                {
                    if (value.GetType() == typeof(String))
                        this.selectedvalue = value;
                }
            }
        }
     
        /// <summary>
        /// Définition du Converter qui va gérer la correspondance entre un simple String et ma liste de valeur
        /// </summary>
        public class MainListConverter : System.ComponentModel.TypeConverter
        {
            public List<String> MainList;
     
            private MainListConverter()
            {
                //Je rempli arbirtrairement ma liste de valeur (peut etre fait dynamiquement)
                MainList = new List<string>();
                MainList.Add("First");
                MainList.Add("Second");
                MainList.Add("Third");
                MainList.Add("Fourth");
            }
     
            #region fonction du Converter
     
            // Indicates this converter provides a list of standard values.
            public override bool GetStandardValuesSupported(System.ComponentModel.ITypeDescriptorContext context)
            {
                return true;
            }
     
            // Returns a StandardValuesCollection of standard value objects.
            public override System.ComponentModel.TypeConverter.StandardValuesCollection GetStandardValues(System.ComponentModel.ITypeDescriptorContext context)
            {
                // Passes the local integer array.
                StandardValuesCollection svc =
                    new StandardValuesCollection(MainList);
                return svc;
            }
     
            // Returns true for a sourceType of string to indicate that 
            // conversions from string to integer are supported. (The 
            // GetStandardValues method requires a string to native type 
            // conversion because the items in the drop-down list are 
            // translated to string.)
            public override bool CanConvertFrom(System.ComponentModel.ITypeDescriptorContext context, System.Type sourceType)
            {
                if (sourceType == typeof(string))
                    return true;
                else
                    return base.CanConvertFrom(context, sourceType);
            }
     
            // If the type of the value to convert is string, parses the string 
            // and returns the integer to set the value of the property to. 
            // This example first extends the integer array that supplies the 
            // standard values collection if the user-entered value is not 
            // already in the array.
            public override object ConvertFrom(System.ComponentModel.ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
            {
                if (value.GetType() == typeof(string))
                {
                    // Parses the string to get the integer to set to the property.
                    String newVal = (String)value;
     
                    // Tests whether new String is already in the list.
                    if (!MainList.Contains(newVal))
                    {
                        // If the String is not in list, adds it in order.
                        MainList.Add(newVal);
                        MainList.Sort();
                    }
                    // Returns the String value to assign to the property.
                    return newVal;
                }
                else
                    return base.ConvertFrom(context, culture, value);
            }
            #endregion
        }
    }

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

Discussions similaires

  1. Procédure Stockée pour créer des TABLE dynamiquement
    Par GuyverZ dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 12/05/2009, 22h29
  2. Créer un menu dynamique (appele de pages externe)
    Par pierrot10 dans le forum ASP
    Réponses: 2
    Dernier message: 28/11/2005, 08h35
  3. Créer un objet dynamiquement
    Par soad dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 08/11/2005, 14h03
  4. [DisplayTag] Créer un lien dynamique avec javascript
    Par babylone7 dans le forum Taglibs
    Réponses: 3
    Dernier message: 20/04/2005, 10h23
  5. [DisplayTag] Comment créer un lien dynamique
    Par tscoops dans le forum Taglibs
    Réponses: 3
    Dernier message: 17/02/2005, 09h53

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