使用 RTTI 获取/设置子属性
根据下面的代码片段,使用 GetPropValue(MyComponent,'MySubComponent.Prop1')
会引发 EPropertyError 异常。 如何使用 GetPropValue / SetPropValue 检索或设置 SubProperties 的值?
Type
TMySubComponent = class(TInterfacedPersitent)
private
FProp1: Integer;
published
property Prop1: integer read FProp1 write FProp1;
end;
TMyComponent = class(TCompoent)
private
FMySubComponent : TMySubcomponent;
published
property MySubComponent: TMySubComponent read FMySubComponent write FMySubComponent ;
end;
Given the following code snippet below, using GetPropValue(MyComponent,'MySubComponent.Prop1')
raises an EPropertyError exception.
How can I retrieve or set the values of SubProperties using GetPropValue / SetPropValue?
Type
TMySubComponent = class(TInterfacedPersitent)
private
FProp1: Integer;
published
property Prop1: integer read FProp1 write FProp1;
end;
TMyComponent = class(TCompoent)
private
FMySubComponent : TMySubcomponent;
published
property MySubComponent: TMySubComponent read FMySubComponent write FMySubComponent ;
end;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
正如 Robert 所说,不支持点符号,但您可以轻松创建一个函数来使用 RTTI 设置或获取子属性值。检查这个样本
As Robert says the dot notation is not supported , but you can create easily a function to set or get a sub-property value using the RTTI. check this sample
不支持您在问题中使用的点符号。
您需要获取子组件的值,然后对各个属性执行设置和获取。
TypInfo.pas 方法仅适用于已发布的属性,您可以使用 RTTI.pas 方法获取公共属性。
The dot notation you used in your question is not supported.
You need to get the Value of the SubComponent, then perform the Set and Get on the individual properties.
The TypInfo.pas method will only work with published properties, you can get the public properties with the RTTI.pas method.