为了避免单例和全局变量,我希望能够将参数传递给TFrame组件。但是,由于在设计时通常在窗体上包含TFrame,所以只能使用默认构造函数。

创建TFrame之后,父窗体当然可以在OnCreate回调中设置一些属性。但是,这不能确保不会忘记属性,并且依赖项不如使用构造函数那样明确。

一个好的方法是,在读取dfm文件时是否可以注册一个用于创建组件的工厂。然后,在工厂创建时可以将所需的参数传递给TFrame构造函数。有没有办法做到这一点?

还是有人对如何将参数传递到TFrame有更好的解决方案?

最佳答案

所有组件,包括TFrame的后代,都必须能够使用从TComponent继承的构造函数进行构造。否则,它们将无法在设计时正确使用。如果您可以接受设计时使用的限制,则可以覆盖该构造函数并引发异常。这将防止在设计时将组件放置在表单上。只需提供一些需要其他参数的构造函数即可。

由于设计时的要求,所有组件都必须能够以其某些或全部属性仍保持其默认值的状态存在。这并不意味着组件在处于该状态时就必须做有用的事情,但是它们确实需要能够无限期地保持在该状态。例如,应该将一个组件放置在表单上,​​保存该表单,然后关闭Delphi,以便稍后再恢复表单设计。即使尚未设置其所有属性以供最终使用,该组件也应允许对其进行保存和还原。

我的首选方法是仅在运行时强制执行组件的规则。在允许使用所有属性之前,请检查所有属性均设置为合理的值。您可以使用断言来强制正确使用组件。如果您的班级的使用者尚未完成在表格上设置组件的学习,他们将很快学习。

09-28 14:00