2009-09-03 64 views
1

我得到與此代碼的對象的子屬性,設置對象的子屬性問題的值

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

認爲「theObject」變量是一個TextBox,我嘗試設置TextBox.Font.Bold = true;

我使用此代碼的主要屬性,它適用於我主要屬性的自定義。但是,當我訪問子屬性時,我得到一個錯誤,即「未將對象引用設置爲對象的實例」。

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

你可以粘貼全部例外請 – 2009-09-03 23:03:32

回答

2

它看起來像你傳遞錯誤的對象SetValue - 在它的面前,它看起來像你喜歡的東西:

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

然後你得到的文本框的Font財產和該字體的Bold屬性,然後嘗試將值true分配給TextBoxBold屬性。顯然這不起作用。

也許是這樣的:

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); 
     } 
    } 
} 

注意設置子對象的屬性的情況下是孩子對象,而不是父對象。

+0

我可以從XML獲取屬性和值。這裏沒有問題,但現在我得到這個錯誤:「對象與目標類型不匹配。」當SetValue方法。 – Can 2009-09-03 23:36:17

+0

我想我發現我的錯誤,我假定childObject是'Font'的實例,但它不是。我已經重新編輯了答案,這次試試。 – Guss 2009-09-03 23:50:29

+0

是的。非常感謝你,它的作品。 – Can 2009-09-04 00:09:30