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

Delphi-运行代码而不显示表单,delphi,delphi-6,Delphi,Delphi 6,您如何看待这种编程实践: -我需要在第一个表单上执行一个事务,然后再强制在另一个表单上进行一些更新(对于在另一个表单上显示的每个项目)。也就是说,这就像显示该表单并单击某个按钮。因为必须从第二个表单执行这些功能,所以我想在不显示第二个表单的情况下执行这些功能。这是一个很好的编程实践还是你有其他的建议 另外,对于第二个表单,只需在showmodel之前设置属性>Visible:=False就足够了,还是我需要执行一些其他操作?嗯,不显示表单是不寻常的。通常,您将业务逻辑与UI分离 为了回答您的问题

您如何看待这种编程实践:
-我需要在第一个表单上执行一个事务,然后再强制在另一个表单上进行一些更新(对于在另一个表单上显示的每个项目)。也就是说,这就像显示该表单并单击某个按钮。因为必须从第二个表单执行这些功能,所以我想在不显示第二个表单的情况下执行这些功能。这是一个很好的编程实践还是你有其他的建议


另外,对于第二个表单,只需在showmodel之前设置属性>Visible:=False就足够了,还是我需要执行一些其他操作?

嗯,不显示表单是不寻常的。通常,您将业务逻辑与UI分离


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

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

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

  • 正如我已经指出的,你必须注意一个问题。也就是说,当前(甚至由于将来某个时候的维护),您的表单依赖于可见来正确执行其工作
  • 当然,您可以通过让窗体闪烁打开,然后按编程方式关闭来解决这个问题。显然,这是一个美学上糟糕的选择
  • 更不用说做对的问题了。最后,您将编写一组修补程序代码来包装表单,以便它可以执行您需要执行的操作,而您应该执行以下操作
正确的方法

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

上述方法将在将来为您节省大量的麻烦。

“必须从第二种形式执行这些功能”——这并不意味着您必须将逻辑放在该形式中。您可以在不同的单元中创建一个单独的对象,并让窗体使用它。通过这种方式,您不必仅为了访问一项功能而构建此表单。通常,将业务逻辑与表示分离是一种很好的做法。我知道多层体系结构和将业务逻辑与UI分离是一种很好的做法,但这是一种特殊情况,我使用一些内部开发的组件来处理以某种方式与表单和GUI连接的事务。我正在使用它对数据库执行一些操作。在未来,我将牢记三层架构,并在当前情况允许的情况下尽量避免类似的情况。