【发布时间】:2013-03-20 12:06:28
【问题描述】:
如何从框架代码中获取框架所有者表单的类类型,并将该类型转换为 TFormClass? 我知道我需要注册表单类,所以我可以用GetClass 获取它,但是我卡住了。
【问题讨论】:
-
我不明白。
Owner.ClassType不起作用? -
@NGLN,所有者不一定是 TForm。
如何从框架代码中获取框架所有者表单的类类型,并将该类型转换为 TFormClass? 我知道我需要注册表单类,所以我可以用GetClass 获取它,但是我卡住了。
【问题讨论】:
Owner.ClassType 不起作用?
宿主窗体的类类型是这样获取的:
HostFormClassType := TFormClass(GetParentForm(Self).ClassType);
在这里,当我写 Self 时,我认为它是你的框架。尽管您说的是“所有者”,但我怀疑您的真正意思是框架所在的形式。这通常与框架的所有者相同,但并非总是如此。
无需注册或致电GetClass。
唯一的小问题是GetParentForm 可以返回从TCustomForm 派生的东西,而不是TForm。所以上面代码中的转换有可能是不正确的。您可以通过包含运行时测试来解决这个问题。
var
ClassType: TClass;
....
ClassType := GetParentForm(Self).ClassType;
Assert(ClassType.InheritsFrom(TForm));
HostFormClassType := TFormClass(ClassType);
【讨论】: