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 :

création de type enum en runtime


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 10
    Points
    10
    Par défaut création de type enum en runtime
    Bonjours à tous
    je veux créer des type enum dynamiquement à partie d'un fichier xml au moment de la compilation pour les utiliser
    Est ce que quelqu'un peut m'aider
    Merci d'avance

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Au moment de la compilation, je ne vois pas bien (de plus c'est contradictoire avec ton titre, où tu parles de runtime, pas de compiletime).

    Au moment de l'exécution c'est possible avec le code DOM.

    ceci dit tu peux faire un utilitaire utilisant le code DOM qui sera lancé au moment de la compilation. (à l'aide des propriétés Custom Tools et tutti quanti).

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Je veux bien dire au moment de l'execution puisque j'ai pas une visibilité sur mon xml le fichier xml

  4. #4
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    Pour quoi tu ne construits pas simplement une liste de String que tu charges via ton fichier xml ?
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    A tout hasard, voici un exemple de génération d'enum à partir d'une liste de valeurs : (génération du source et génération de l'assembly in-memory).

    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
     
    private static string generateEnum(string[] MyVals )
    {
    StringBuilder sbCodeSource = new StringBuilder();
    StringWriter sw = new StringWriter(sbCodeSource);
    CompilerParameters compilerParameters = new CompilerParameters();
    compilerParameters.GenerateExecutable = false;
    compilerParameters.GenerateInMemory = true; 
    compilerParameters.IncludeDebugInformation = false;
    compilerParameters.WarningLevel = 1;
    // Invoke compilation.
    CodeDomProvider provider = CodeDomProvider.CreateProvider( "C#" );
    CodeNamespace myNs = new CodeNamespace("MyNameSpace");
    CodeCompileUnit compileUnit = new CodeCompileUnit();
    compileUnit.Namespaces.Add(myNs);
    CodeTypeDeclaration enumDeclaration = new CodeTypeDeclaration("MyEnum");
    enumDeclaration.IsEnum = true;
    enumDeclaration.Attributes = MemberAttributes.Public;
    myNs.Types.Add(enumDeclaration);
     
    foreach (string val in MyVals)
    {
    CodeMemberField enumField = new CodeMemberField();
    enumField.Name = val;
    enumDeclaration.Members.Add(enumField);
    }
     
    provider.GenerateCodeFromCompileUnit(compileUnit, sw, null);
    CompilerResults compilerResults = provider.CompileAssemblyFromDom(compilerParameters, compileUnit);
     
    if(compilerResults.Errors.Count == 0)
    {
    return sbCodeSource.ToString();
    }
    return null;
    }

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  6. #6
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    mainteneant comment je peux utiliser ce nouveau type généré d'habitude si c'est un type connu string par exemple je met typeof(System.String)
    maintenant queceque je vais mettre

  7. #7
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Rien compris ...

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  8. #8
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    d'habitude si j'ai un type enum static je l'appelle simplement par son nom et
    à ce que j'ai compri la méthode generateEnum va créer un nouveu type Enum
    comment je vais l'appeler ?

  9. #9
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par marwaa Voir le message
    d'habitude si j'ai un type enum static je l'appelle simplement par son nom et
    à ce que j'ai compri la méthode generateEnum va créer un nouveu type Enum
    comment je vais l'appeler ?
    Faut pas exagérer : tu peux peut être quand même lire le code que je t'ai passé !!!!!!!!!

    Le nom du type est renseigné dans le code.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  10. #10
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    oui je l'ai lu mais le probléme que le type MyEnum est inconnue (il ne le connait pas encore)

  11. #11
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par marwaa Voir le message
    oui je l'ai lu mais le probléme que le type MyEnum est inconnue (il ne le connait pas encore)

    Ecoute, ce que je t'ai passé c'est un exemple; maintenant tu le modifie pour le faire coller à tes besoins.

    je ne vois pas en quoi tu as besoin de connaître statiquement le nom du type, puisque tu le génére ?

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  12. #12
    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
    connaitre statiquement !!!

    Beh, j'ai l'impression que la question est la suivante :

    J'ai un type Toto... et je voudrais le renseigner dynamiquement mais pouvoir l'utiliser "statiquement".. ce qui est un paradoxe total

    J'vois pas trop l'interet d'avoir un enum en dynamique sauf si c pour génerer du code derrière et encore....

    J'ai du mal à expliquer dans quelle situation "courante" ou pas on peut avoir recours à ce genre de mécanisme.. Autant passer par des chaines de caractères à ce moment là...

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

  13. #13
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par theMonz31 Voir le message
    J'ai du mal à expliquer dans quelle situation "courante" ou pas on peut avoir recours à ce genre de mécanisme.. Autant passer par des chaines de caractères à ce moment là...
    J'ai précisément un cas où j'y ai recours : en gros, j'ai besoin de proposer un choix a design-time sur une propriétés d'un contrôle, matérialisée par un enum, dont le contenu dépend d'info externes; bien sur je ne génére pas la source; j'ai rajouté la ligne entrainant la génération de source dans l'exemple uniquement pour des raisons didactiques.

    (du fait que j'avais le code sous la main, j'ai pu rapidement expurger mon code pour lui proposer cet exemple).

    ceci dit, dans son cas, je soupçonne une mauvaise conception, vu les réquisitions contradictoires qu'il demande.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  14. #14
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    donc si je reformule ma question
    j'ai un fichier xml qui semble à ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <root>
    <type nom="saison">
    <membre>hiver</membre>
    <membre>ete</membre>
    </type>
    <type nom="semaine">
    <membre>mardi</membre>
    <membre>mercredi</membre>
    </type>
    </root>
    j'ai besoin de générer des types enum pour les utiliser
    mais mon probléme est du fait que je ne conais pas d'avance les types que je peux les rencontrés dans mon xml
    donc j'ai pensé à les générer dynamiquement

  15. #15
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    j'ai utilisé le code que j'ai sous la main et j'ai vu qu'il retourne un namespace et un type enum mais mon probléme c'est comment utiliser ce code commet
    , comment utiliser ce type je n'arrive pas à l'exploiter

  16. #16
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    Tu te compliques la vie. Pourquoi tu ne crée pas simplement une classe Type avec une propriété Nom et une liste de string contenant les membres ?
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

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

Discussions similaires

  1. ENUM et création de types
    Par Heavy Metal Hero dans le forum SQLite
    Réponses: 1
    Dernier message: 25/11/2013, 13h53
  2. création d'un champ de type enum
    Par hanadi_09 dans le forum Débuter
    Réponses: 1
    Dernier message: 29/08/2010, 04h52
  3. Création Type Enum
    Par rvzip64 dans le forum Langage
    Réponses: 2
    Dernier message: 09/06/2009, 11h44
  4. [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
  5. [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

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