设置对象的子属性问题的值

时间:2009-09-03 23:00:37

标签: .net components

我使用此代码

获取对象的子属性

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

1 个答案:

答案 0 :(得分:2)

看起来你正在将错误的对象传递给SetValue - 从它的表面看起来你会得到类似的东西:

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

然后您获得文本框的Font属性和字体的Bold属性,然后尝试将值true分配给Bold属性TextBox。显然这不会起作用。

也许是这样的:

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

请注意,设置子对象属性的上下文是子对象,而不是父对象。