Re Propriété (pas si simple)

cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 - 27 févr. 2009 à 18:30
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 - 13 mars 2009 à 08:53
Re bonjour !

J'ai de nouveau une petite question.
Toujours avec le même code :
J'ai créer un code qui permet de donné une valeur à une propriété quelque soit le type de propriété et de contrôle.

Mais bon, "quelque soit le type de propriété", pas vraiment...
En effet, ici par exemple (j'ai pas mit toute la fonction), on peu définir la valeur d'une propriété de type boolean à n'importe quel contrôle....

            For Each a As System.ComponentModel.IComponent In Composant
                If DirectCast(a, Control).Name = Ctrl Then
                    Select Case DirectCast(a, Control).GetType.GetProperty(Nom).PropertyType.Name
                        Case "Boolean"
                            DirectCast(a, Control).GetType.GetProperty(Nom).SetValue(a, CBool(Valeur), Nothing)
                    End Select
                End If
            Next

Jusque là facile, mais si je m'y prend comme ça, je vais avoir 3 kilomètre de code pour mettre la même chose pour String, Integer, Image, Color, et sans compté les type du style FlatStyle, FormBorderStyle...etc et sans compté aussi la possibilité que des contrôle personnalisé possèdes leur propre type....

Et oui, faut pas oublier tout ça.

Donc ma question est la suivante :

Comment je pourrais faire pour donner une valeur à une propriété quelque soit le type (et en sachant la variable Valeur est String) ???

Merci

 
*** ebaudoux@club.fr ***
*** http://www.velersoftware.fr.nf/ ***

5 réponses

cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 2
27 févr. 2009 à 21:10
Bon, ça va, j'avance

J'ai réussit à faire ce que je voulais, grâce au code suivant :

Dim tip As System.ComponentModel.TypeConverter
Dim prop As System.ComponentModel.PropertyDescriptor
Dim obj As Object
Dim isCollection As Boolean

For Each a As System.ComponentModel.IComponent In Composant
                If DirectCast(a, Control).Name = Ctrl Then
                        prop = System.ComponentModel.TypeDescriptor.GetProperties(a)(Nom)
                        tip = prop.Converter
                        isCollection = prop.Attributes.Contains(System.ComponentModel.DesignerSerializationVisibilityAttribute.Content)
                        If isCollection Then
                            DirectCast(a, ComboBox).Items.Add(Valeur)
                        Else
                            obj = tip.ConvertFromInvariantString(Valeur)
                            prop.SetValue(a, obj)
                        End If
                End If
Next

Explication :
- On charge la propriété
- On cherche un convertisseur de donné String vers n'importe quoi
- Si on a affaire à une collection (pour une propriété items par exemple), on ajoute l'item (pas terminé ici, j'ai fait un test avec un combobox)
- Sinon, et bien on convertit la valeur string en propriété et on l'affecte au contrôle

Si par hasard la solution pour les Collections vous saute aux yeux, c'est avec plaisir, car je sent que je vais encore galérer, lol

@+++

 
*** ebaudoux@club.fr ***
*** http://www.velersoftware.fr.nf/ ***
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
28 févr. 2009 à 12:02
Bonjour,

Je ne sais pas si cela va t'aider, mais ton pb est similaire à celui que j'avais... Voici une demie-solution : http://www.vbfrance.com/codes/METTRE-VALEUR-ENSEMBLE-CONTROLES-MEME-TYPE_47925.aspx 
Je dis "demi" car j'utilise la compabilité à VB6 sous VB.NET, qui avait cette la fonction CALLBYNAME...
et il y a aussi les snippets : http://www.codyx.org/snippet_donner-valeur-dans-ensemble-meme-type-controle_528.aspx , qui certes ne sont tj pas VB.NET, mais j'en avais fait un sous VB.NET par compatibilité, mais pas retenu (probablement pour cette raison)... mais c'est possible...

Enfin, si tu trouve une source inspiration...

En réalité tu touches presque au but, et ton code final pourrait peut-être, être rajouté au snippet...

Je garde ton post sous le coude...

Amicalement,
Us.
0
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 2
28 févr. 2009 à 14:50
Salut,

Ok, je vais aller voir ça, je te tiens au courant

 
*** ebaudoux@club.fr ***
*** http://www.velersoftware.fr.nf/ ***
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
1 mars 2009 à 01:31
peut etre des elements de reponses dans le code suivant :

http://www.csharpfr.com/codes/METHODE-CLONAGE-DEEPCLONAGE_34850.aspx
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 2
13 mars 2009 à 08:53
Salut,

Bon, depuis ma dernière réponse, et bien je n'ai pas avancé .
J'ai essayé plein de chose, basé souvent sur les liens que vous m'avez donné, mais rien de ce que j'ai fait ne fonctionne. Avez-vous d'autre chose pour m'aider?

 
*** ebaudoux@club.fr ***
*** http://www.velersoftware.fr.nf/ ***
0
Rejoignez-nous