Propriétés d'un control par défaut

[Résolu]
Signaler
Messages postés
43
Date d'inscription
lundi 31 mars 2003
Statut
Membre
Dernière intervention
4 mars 2011
-
Messages postés
43
Date d'inscription
lundi 31 mars 2003
Statut
Membre
Dernière intervention
4 mars 2011
-
Bonjour,

Je change les propriétés de controls (button, textbox, ...) via une PropertyGrid.
Puis, je récupére chaque control dans un objet de type "Component".
Enfin, je créé une Hashtable contenant les propriétés du control.

Cependant je voudrais savoir si chaque propriété du control est celle par défaut par rapport à l'objet (button, textbox, ...).

En résumé, je veux récupérer une Hashtable contenant uniquement toutes les propriétés du control n'étant pas celles par défault.

Code :

Hashtable Prop =
new
Hashtable();

PropertyDescriptorCollection Properties =
TypeDescriptor.GetProperties(comp);

foreach (
PropertyDescriptor Property
in Properties)
{

if (Property.IsReadOnly ==
false)
   Prop.Add(Property.Name, Property.GetValue(comp));
}

Une idée ?

4 réponses

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
37
y a pas de propriété par défaut... mais de valeur par défaut !

il faut récupérer la valeur de l'attribut [DefaultValue]

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
Messages postés
43
Date d'inscription
lundi 31 mars 2003
Statut
Membre
Dernière intervention
4 mars 2011

Merci, super.

Pour qui ça intéresse, le code :

//Création du tableau de propriété
Hashtable Prop =
new
Hashtable();

PropertyDescriptorCollection Properties =
TypeDescriptor.GetProperties(comp);

foreach (
PropertyDescriptor Property
in Properties)
{

   if (Property.IsReadOnly ==
false)
   {

      //On récupére la valeur par défaut
      DefaultValueAttribute DefValAttr = (
DefaultValueAttribute)Property.Attributes[
typeof(
DefaultValueAttribute)];

      object DefaultValue =
null;

      if(DefValAttr !=
null)
         DefaultValue = DefValAttr.Value;

      //Valeur de la propriété
      object Value = Property.GetValue(comp);

      //On ne récupére que la valeur par défaut
      if(Value != DefaultValue)
         Prop.Add(Property.Name, Value);
   }
}
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
37
juste une remarque... j'aurai fait comme ceci :

//Création du tableau de propriété
Hashtable Prop = newHashtable();
PropertyDescriptorCollection Properties = TypeDescriptor.GetProperties(comp);

foreach (PropertyDescriptor Property in Properties)
{
   if (Property.IsReadOnly == false)
   {

      //On récupére la valeur par défaut
      DefaultValueAttribute DefValAttr = Property.Attributes[typeof(DefaultValueAttribute)] As DefaultValueAttribute;
      object DefaultValue = null;
      if(DefValAttr != null)
         DefaultValue = DefValAttr.Value;

      //Valeur de la propriété
      object Value = Property.GetValue(comp);

      //On ne récupére que la valeur par défaut
      if(Value != DefaultValue)
         Prop.Add(Property.Name, Value);
   }
}

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
Messages postés
43
Date d'inscription
lundi 31 mars 2003
Statut
Membre
Dernière intervention
4 mars 2011

Merci,

Pour la suite j'ais du faire autrement, je ne sais pourquoi mais quand je faisait :
if(DefaultValue != Value)
il entrait dans le "if" alors que les valeurs étaient éguales...

Donc voici ce que j'ais fait :

//Création du tableau de propriété

Hashtable Prop =
new
Hashtable();

PropertyDescriptorCollection Properties =
TypeDescriptor.GetProperties(comp);

foreach (
PropertyDescriptor Property
in Properties)
{

   if (Property.IsReadOnly ==
false)
   {

   bool IsEquals =
false;

   //On récupére la valeur par défaut
   DefaultValueAttribute DefValAttr = Property.Attributes[
typeof(
DefaultValueAttribute)]
as DefaultValueAttribute;

   object DefaultValue =
null;

   if (DefValAttr !=
null)
      DefaultValue = DefValAttr.Value;

   //Valeur de la propriété
   object Value =
null;
   Value = Property.GetValue(comp);

   if (DefaultValue !=
null)
      IsEquals = DefaultValue.Equals(Value);

   else
if (Value !=
null)
      IsEquals = Value.Equals(DefaultValue);

   else
      IsEquals =
true;

   //On récupére la valeur uniquement si elle est différente
   if (!IsEquals)

      if (!Prop.ContainsKey(Property.Name))
         Prop.Add(Property.Name, Value);
   }
}