繁体   English   中英

使用RTTI获取Delphi中组件的子属性

[英]Get a sub property of a component in Delphi using RTTI

我想使用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
有谁知道这是怎么做到的吗?

索引属性和所有其他属性(直接引用对象字段除外)只是getXXXsetXXX方法的快捷方式。

尝试这种方式:

  1. 使用GetDeclaredIndexedPropertiesGetIndexedProperties获取Ctx.GetType(MyComponent1.ClassInfo)所有索引属性

  2. 在返回的TRttiIndexedProperty实例数组中搜索所需的Property

  3. 得到写方法描述对象WriteMethod财产TRttiIndexedProperty找到对象。

  4. 如果需要使用GetParameters调用获取方法参数描述。

  5. 使用构造的参数列表Invoke方法描述对象的Invoke方法以设置属性值。

更新资料

仅适用于XE2及更高版本的Delphi版本。

在以前的版本中,只能使用类似于此问题中所讨论的内容,将索引属性用于RTTI。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM