Delphi - 运行代码而不显示表单

时间:2011-03-18 10:48:29

标签: delphi delphi-6

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

此外,仅仅设置属性>第二个表单的 ShowModal 之前可见:=错误,还是我需要做其他一些操作?

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:2)

第二个问题:设置Visible := False没有任何好处,因为所有ShowXXX方法的目的都是使表单可见。正如David所说,您可以在不调用Show的情况下执行操作,前提是您的表单当然不依赖于任何OnActivateOnShow代码,以便正常工作。

至于这是否是一个好主意,我说没有

  • 正如我已经指出的那样,你需要注意一个问题。即目前(或者甚至由于未来某些时候的维护),您的表格依赖于正确地完成其工作。
  • 当然,您可以通过让表单闪烁打开并以编程方式关闭来解决这个问题。显然是一个美学上差的选择。
  • 更不用说正确的问题了。您最终会编写一堆补丁工作代码来包装表单,以便它可以执行您需要执行的操作,而您应该执行以下操作...

正确的方法

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

上述方法将为您节省巨大的麻烦。