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 :

Transtypage par reflection sur un object inconnu [Débutant]


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 58
    Points : 57
    Points
    57
    Par défaut Transtypage par reflection sur un object inconnu
    Bonjour,
    après un peu de recherche j'en viens à poser la question sur le forum

    Je voudrais savoir si il est possible de transtyper un object dont on connait pas le type, je donne mon code que j'utilise et je m'explique ensuite

    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
     
     
    public static bool MonTruc(object obj, string sMsg)
            {
                bool bResult = true;
                try
                {
                    if (obj != null)
                    {
                        // Juste pour mémo
                        // Type t = obj.GetType();
                        // System.Reflection.PropertyInfo[] pi = t.GetProperties();
                        // Type tGen= t.GetGenericTypeDefinition();
     
                        if (obj.GetType() == typeof(Label)) 
                            ((Label)obj).Text = sMsg;
                        else if (obj.GetType() == typeof(ToolStripStatusLabel))
                            ((ToolStripStatusLabel)obj).Text = sMsg;
                        else if (obj.GetType() == typeof(TextBox))
                            ((TextBox)obj).Text = sMsg;
                    }
                }
                catch (Exception ex)
                {
                    bResult = false; 
                }
                return bResult;
            }
    Je voudrais modifier la valeur sMsg de la propriété Text de mon objet obj.

    1°/ Comment vérifier que mon objet obj possède bien une propriété Text (sans doute par PropertyInfo, mais pas trouvé comment) ?

    2°/ Au lieu de vérifier par des if le type d'objet, peut-on imaginer un truc générique du genre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // Au lieu de
    if (obj.GetType() == typeof(TextBox))
       ((TextBox)obj).Text = sMsg;
     
    // un truc du genre 
    // ((Type de mon object)obj).Text = sMsg;
    Merci à vous de m'éclairer sur ces deux points...

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Points : 1 502
    Points
    1 502
    Par défaut
    Salut,

    1°/ Comment vérifier que mon objet obj possède bien une propriété Text (sans doute par PropertyInfo, mais pas trouvé comment) ?
    C'est bien ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var untype = this.GetType();
                var textpop = untype.GetProperty("Text");
    => va te renvoyer null si la property n'existe pas.

    2°/ Au lieu de vérifier par des if le type d'objet, peut-on imaginer un truc générique du genre ?
    Oui, il y a plus simple, via la reflexion:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var uneInstance = this;
                var untype = uneInstance.GetType();
                var textpop = untype.GetProperty("Text");
                textpop.SetValue(unmsg, uneInstance, null);
    => te permet d'affecter une valeur a la propriete Text d'une instance d'objet.

    => tu n'etais pas loin.

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 58
    Points : 57
    Points
    57
    Par défaut
    Un super grand merci à toi mermich

    J'ai juste modifier le .SetValue qui demande d'abord obj et ensuite la valeur... ce qui donne ceci, pour ceux qui sont intéressés:

    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
     
            public static bool MonTruc(object obj, string sMsg)
            {
                bool bResult = true;
                try
                {
                    if (obj != null)
                    {
                        var untype = obj.GetType();
                        var textpop = untype.GetProperty("Text");
     
                        if (textpop != null)
                            textpop.SetValue(obj, sMsg);
                    }
                }
                catch (Exception ex)
                {
                    bResult = false; 
                }
                return bResult;
            }
    Voilà une réponse des plus claires, j'apprécie d'autant plus

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

Discussions similaires

  1. BeginInvoke sur une méthode par Reflection delegate
    Par jpbelmondo59 dans le forum C#
    Réponses: 0
    Dernier message: 02/06/2015, 10h58
  2. Réponses: 2
    Dernier message: 10/05/2005, 19h33
  3. [CR.NET] Imprimante par defaut sur PC client
    Par GTRANNECY dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 26/04/2005, 12h31
  4. [VB.NET] Evenement par défaut sur controle personnalisé
    Par anthony70 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 31/08/2004, 16h19
  5. [CR8.5] Problème de division par zéro sur formule
    Par franck.cvitrans dans le forum Formules
    Réponses: 3
    Dernier message: 10/06/2004, 13h41

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