2

您如何看待这种编程实践: - 我需要在第一个表单中执行一个事务,然后强制执行一些更新,这些更新被放置在另一个表单中(对于在另一个表单中显示的每个项目)。即,它就像显示该表单并单击某个按钮。因为从第二种形式执行这些功能是强制性的,所以我想在不显示第二种形式的情况下这样做。这是良好的编程习惯还是您有其他建议?

另外,在ShowModal之前为第二种形式设置 property> Visible:=False就足够了,还是我需要做一些其他的动作?

4

2 回答 2

6

嗯,有一个你不显示的表格是不寻常的。通常,您将业务逻辑与 UI 分开。

要回答您的问题,我认为您根本不需要致电 ShowModal。只需在表单类上定义一个方法并调用它。最终,表单只是 Delphi 对象,您可以这样使用它们。如果您不想显示它们,请不要调用 ShowModal 或 Show。

于 2011-03-18T10:58:59.150 回答
2

第二个问题首先:设置Visible := False没有任何好处,因为所有 ShowXXX 方法的重点是使表单可见。正如大卫所说,您可以执行这些操作而根本不调用 Show,当然前提是您的表单不依赖任何代码OnActivateOnShow代码来正确完成工作。

至于这是否是个好主意,我说不

  • 正如我已经指出的那样,您必须注意一个问题。即当前(或什至由于将来某个时间点的维护)您的表单依赖于可见性来正确完成其工作。
  • 当然,您可以通过让表单闪烁打开并以编程方式关闭来解决此问题。显然是一个美学上糟糕的选择。
  • 更不用说正确处理的问题了。您最终将编写一堆拼凑代码来包装表单,以便它可以执行您需要执行的操作,而您应该执行以下操作...

正确的方法

  • 您的表单目前正在做至少 2 件不同的事情:
    • 可视化 UI 控件(称之为 A)
    • 和“强制性功能”(称之为 B)
  • B 是否在执行验证规则、额外处理或其他任何事情都无关紧要。
  • B 是一个不需要用户交互的过程。
  • 因此,您需要:
    • 将 B 复制到非 UI 位置(具有自定义对象或数据模块的简单单元)。称它为 B*
    • 修改表单以调用 B* 而不是使用 B。
    • 测试您的表单是否仍然正常运行。
    • 删除 B
    • 现在您可以让您的新表单调用 B*。

上述方法将在未来为您省去巨大的麻烦。

于 2011-03-18T18:56:48.820 回答