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 :

Instanciation dynamique de types


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 347
    Par défaut Instanciation dynamique de types
    Bonjour,

    j'aimerai avoir une fonction générique un peu 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
    15
    16
    17
    18
    19
    20
    21
    22
    public static void fnEHAAll<U>(U param)
    {
     string[] Types = new string[] { "comboBox", "dateTime", "groupBox", "text" };
    /* QUELQUE CHOSE DE DYNAMIQUE ICI POUR TYPER f EN FONCTION DU TYPE DE param
     Form f = param as Form;
     GroupBox f = param as GroupBox;
    */
     for (int i = 0; i < f.Controls.Count; i++)
     {
      if (f.Controls[i].Name.Split(Types, StringSplitOptions.None).Length > 0)
      {
       if (f.Controls[i].Name.Contains("groupBox"))
       {
        fnEHAAll<GroupBox>(((GroupBox)f.Controls[i]));
       }
       else
       {
        f.Controls[i].Validating += new CancelEventHandler(fnVerification);
       }
      }
     }
    }
    Qui remplacerai mes 2 fonctions actuel:

    Pour les Form
    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
    public static void fnEHAAll(Form param)
    {
     string[] Types = new string[] { "comboBox", "dateTime", "groupBox", "text" };
     Form f = param as Form;
     for (int i = 0; i < f.Controls.Count; i++)
     {
      if (f.Controls[i].Name.Split(Types, StringSplitOptions.None).Length > 0)
      {
       if (f.Controls[i].Name.Contains("groupBox"))
       {
        fnEHAAll(((GroupBox)f.Controls[i]));
       }
       else
       {
        f.Controls[i].Validating += new CancelEventHandler(fnVerification);
       }
      }
     }
    }
    Pour les GroupBox
    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
    public static void fnEHAAll(GroupBox param)
    {
     string[] Types = new string[] { "comboBox", "dateTime", "groupBox", "text" };
     GroupBox f = param as GroupBox;
     for (int i = 0; i < f.Controls.Count; i++)
     {
      if (f.Controls[i].Name.Split(Types, StringSplitOptions.None).Length > 0)
      {
       if (f.Controls[i].Name.Contains("groupBox"))
       {
        fnEHAAll(((GroupBox)f.Controls[i]));
       }
       else
       {
        f.Controls[i].Validating += new CancelEventHandler(fnVerification);
       }
      }
     }
    }
    Ici, j'aimerai savoir si il est possible d'instancier dynamiquement un Form ou un GroupBox passer en argument?

    Je vous remercie d'avance, si vous pouviez faire la modif de façon à bien être clair.

  2. #2
    Membre émérite
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Par défaut
    Trouve un ancêtre commun à Form et GroupBox et précise le pour le ton type générique.
    Admettons que l'on prenne Control comme ancêtre, ça donnerait :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static void fnEHAAll<U>(U param) where U: Control
    {
      //...
    }
    Dès lors, ton param est considérer comme un Control.

    Question: pourquoi souhaites-tu utiliser les génériques dans ce cas ?
    Car si tu fais :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static void fnEHAAll(Control param)
    {
      //...
    }
    ça sera exactement pareil, et beaucoup simple...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 347
    Par défaut
    Merci ça fonctionne parfaitement

    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
    public static void fnEHAAll<U>(U param) where U: Control
    {
     string[] Types = new string[] { "comboBox", "dateTime", "groupBox", "text" };
     
     for (int i = 0; i < param.Controls.Count; i++)
     {
      if (param.Controls[i].Name.Split(Types, StringSplitOptions.None).Length > 0)
      {
       if (param.Controls[i].Name.Contains("groupBox"))
       {
        fnEHAAll<GroupBox>(((GroupBox)param.Controls[i]));
       }
       else
       {
        param.Controls[i].Validating += new CancelEventHandler(fnVerification);
       }
      }
     }
    }
    Pour la question, simplement parce que j'y pensé pas... merci

  4. #4
    Membre émérite
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Par défaut
    Tu peux simplifier ta méthode :
    Code c# : 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
    public static void fnEHAAll(Control param)
    {
     string[] Types = new string[] { "comboBox", "dateTime", "groupBox", "text" };
     
     for (int i = 0; i < param.Controls.Count; i++)
     {
      if (param.Controls[i].Name.Split(Types, StringSplitOptions.None).Length > 0)
      {
       if (param.Controls[i] is GroupBox)
       {
        fnEHAAll(param.Controls[i]);
       }
       else
       {
        param.Controls[i].Validating += new CancelEventHandler(fnVerification);
       }
      }
     }
    }

    Et n'oublie pas le tag

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 347
    Par défaut
    Merci, j'ai bien compris l'utilité des génériques et la façon dont ils fonctionnent.

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

Discussions similaires

  1. Instanciation dynamique de types
    Par kendras dans le forum C#
    Réponses: 1
    Dernier message: 07/04/2009, 10h49
  2. Instanciation dynamique
    Par yon386 dans le forum C++
    Réponses: 5
    Dernier message: 15/02/2006, 21h32
  3. [VB.NET] instanciation dynamique
    Par lucie.houel dans le forum ASP.NET
    Réponses: 1
    Dernier message: 21/11/2005, 12h54
  4. Instanciation dynamique d'ActiveX
    Par cathar_rhythm dans le forum MFC
    Réponses: 12
    Dernier message: 28/06/2005, 08h11
  5. [LG]Problême Variable dynamique de types différents
    Par pierrOPSG dans le forum Langage
    Réponses: 2
    Dernier message: 29/04/2004, 16h01

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