2009-09-03 6 views
1

Je reçois des propriétés de l'enfant d'un objet avec ce code,Définition d'une valeur du problème de la propriété enfant d'un objet

PropertyDescriptorCollection childProperties = TypeDescriptor.GetProperties (theObject) [childNode.Name] .GetChildProperties();

pense que la variable "theObject" est un TextBox et j'essaie de définir TextBox.Font.Bold = true;

J'utilise ce code pour les propriétés principales et cela fonctionne lorsque je personnalise pour les propriétés principales. Mais quand j'accède aux propriétés enfant,

Je reçois une erreur qui est "Référence d'objet non définie à une instance d'un objet.".

foreach (PropertyDescriptor childProperty in childProperties) 
     { 
      foreach (XmlAttribute attribute in attributes) 
      { 
       if (childProperty.Name == attribute.Name) 
       { 

        if (!childProperty.IsReadOnly) 
        { 

         object convertedPropertyValue = ConverterHelper.ConvertValueForProperty(attribute.Value, childProperty); 

         childProperty.SetValue(theObject, convertedPropertyValue); //exception throw here 

         break; 
        } 
       } 
      } 
     } 
+0

Pouvez-vous coller l'exception complète s'il vous plaît –

Répondre

2

On dirait que vous passez le mauvais objet à SetValue - sur le visage de celui-ci il semble que vous obtenez quelque chose comme:

<TextBox> 
    <Font Bold="true"/> 
</Textbox> 

Et vous obtenez la propriété Font de la zone de texte et la propriété Bold de la police, puis vous essayez d'affecter la valeur true à la propriété Bold de TextBox. Évidemment, cela ne va pas fonctionner.

Peut-être quelque chose comme ceci:

PropertyDescriptor objProp = TypeDescriptor.GetProperties(theObject)[childNode.Name]; 
PropertyDescriptorCollection childProperties = objProp.GetChildProperties(); 

foreach (PropertyDescriptor childProperty in childProperties) { 
    foreach (XmlAttribute attribute in attributes) { 
     if (childProperty.Name == attribute.Name && !childProperty.IsReadOnly) { 
      Object convertedPropertyValue = converterHelper.ConvertValueForProperty(attribute.Value, childProperty); 
      childProperty.SetValue(objProp.getValue(theObject), convertedPropertyValue); 
     } 
    } 
} 

Notez que le contexte de la définition des propriétés de l'objet enfant est l'objet enfant et non l'objet parent.

+0

Je peux obtenir des attributs et des valeurs de xml. il n'y a pas de problème là mais maintenant je reçois cette erreur: "L'objet ne correspond pas au type de cible." lorsque la méthode SetValue. – Can

+0

Je pense que j'ai trouvé mon erreur, et j'ai supposé que childObject est l'instance de 'Font' mais ce n'est pas le cas. J'ai réédité la réponse, essayez-la cette fois. – Guss

+0

Oui. merci beaucoup. ça fonctionne. – Can

Questions connexes