我有一个表单,其中包含一些使用其他表单的标签。我得出的结论是,它不是有效的方式,因为形式有时可能无法分配。所以我认为在我读取数据之前检查每次分配的表单是不好的,我认为最好创建一个公共属性列表并在读取期间检查是否分配了表单。但除了确保只使用一种方法之外,我决定以某种方式关闭对表单组件属性的直接访问。
简短来说:保护已发布子句中声明的组件不被其他类访问,例如protected或private子句。
但是这个场合似乎没有解决方案。唯一的事情是使用属性创建另一个对象并强制表单使用其属性。
如果你知道,请给我另一种解决方案。
答案 0 :(得分:4)
财产发布后,无法取消发布。 Delphi表单设计者需要发布它所运行的组件。因此,您设计的表格将充满已发布的组件。
由于您无法隐藏组件,剩下的就是隐藏表单。由于您谈论的表单有时没有被分配,我怀疑您使用全局变量来引用您的表单。这可能是你的主要问题。如果你有可见的表单类型的全局变量,那么程序的任何部分都可以在任何其他部分戳,没有任何限制。
所以要做的第一件事就是删除那些全局变量。编写一个没有表单类型的全局变量的应用程序是完全可能的。然后,您可以控制应用程序各部分之间的交互方式。
问题的其他部分暗示您的表单拥有数据。这是一个相当脆弱的设计选择。将数据保存在专为此目的而设计的非可视模型对象中。让表格只提供该数据的观点。然后,当系统的一部分需要请求数据时,它可以询问非可视模型对象而不是视觉形式。