Bonjour,
En ce moment, je travail sur l’utilisation (affichage et édition) des attributs des propriétés d'un objet. L'objet est lui bindé directement sur une propertyGrid.
Pour info, le propertyGrid présente 1 objet « personne » qui est composé de 2 objets « adresse ». Les « adresses » sont aussi accessible dans la propertygrid par l’utilisation de l’instruction suivante : [TypeConverter(typeof(ExpandableObjectConverter))]
La classe static ci-dessous me sert de boite à outil pour modifier dynamiquement les valeurs des attributs.
Mon probleme est le suivant, lorsque je change dynamiquement la valeur (ex : code postal) d’un attribut de l’adresse1, l’attribut de l’adresse2 est modifié lui aussi.
En faite, le TypeDescriptor travail sur les type d’objet alors qu’il faudrait que je puisse travailler sur l’instance de l’objet.
Merci par avance de votre aide.
Cordialement,
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 public static class PropertyDescriptorDynamic { public static void uSetReadOnly(object instance, string property, bool isReadOnly) { if (instance != null) { PropertyDescriptor descriptor = TypeDescriptor.GetProperties(instance.GetType())[property]; ReadOnlyAttribute attribute = descriptor.Attributes[typeof(ReadOnlyAttribute)] as ReadOnlyAttribute; FieldInfo field = attribute.GetType().GetField("isReadOnly", BindingFlags.NonPublic | BindingFlags.Instance); field.SetValue(attribute, isReadOnly, BindingFlags.NonPublic | BindingFlags.Instance, null, null); } } } // changement dynamique des valeur de lattribut pour ADRESSE1 PropertyDescriptorDynamic.uSetReadOnly(ADRESSE1, "CODEPOSTAL", false); PropertyDescriptorDynamic.uSetReadOnly(ADRESSE1, "VILLE", false);
Cédric
Partager