我想使用RTTI访问以下属性
MyComponent1.Property['variable'].SubProperty
我想要那样的东西:
var
Ctx: TRttiContext;
Typ: TRttiType;
SubTyp: TRttiType;
Prop: TRttiProperty;
SubProp: TRttiProperty;
begin
Ctx:= TRttiContext.Create;
Typ:= Ctx.GetType(MyComponent1.ClassInfo);
Prop:= Typ.GetProperty('Property['variable'].Subproperty') //not possible
Prop.SetValue(MyComponent1.Property['variable'],'500');
end;
基本上我想访问我的组件的子属性而我只有字符串,所以我不能使用Typ:=Ctx.GetType(MyComponent1.ClassInfo)
然后Prop:=Typ.GetProperty('Property['variable'].Subproperty')
这是不允许的。请注意第一个属性有一个参数。我想我必须获得第一个属性,然后以某种方式获得第二个属性,因为我不能使用此属性1“。”property2
有谁知道怎么做?
答案 0 :(得分:0)
索引属性作为所有其他属性(对象字段的直接引用除外)只是getXXX
和setXXX
方法的快捷方式。
尝试这种方式:
Ctx.GetType(MyComponent1.ClassInfo)
的所有索引属性
在返回的TRttiIndexedProperty
个数组中搜索所需的Property
。
从找到TRttiIndexedProperty
对象的WriteMethod
属性获取写方法描述对象。
如果您需要GetParameters
调用,请获取方法参数说明。
使用构造参数列表调用方法描述对象的Invoke
方法来设置属性值。
<强>更新强>
这仅适用于XE2及更高版本的Delphi版本。
在以前的版本中,只能使用this question中讨论的内容为RTTI采用索引属性。