delphi - 取消/中止在 Delphi/C++Builder 中创建新表单?

标签 delphi forms c++builder

有没有办法从表单的 OnCreate 事件处理程序或 C++Builder 构造函数中取消或中止表单创建?

基本上,我希望能够从 OnCreate 或构造函数调用 Close() 并让它完全跳过显示表单。我有几种表单,作为其初始化的一部分,可能会确定它们根本不应该显示。 (我意识到我可以将初始化的这一部分分开,或者从调用表单或类似形式添加额外的检查,但如果有一种方法可以从 OnCreate 或构造函数中干净地完成所有这些操作,这似乎是最简单的。)

编辑:针对一些评论,一些根本不显示的逻辑是UI逻辑而不是业务逻辑;表单可能会在显示之前显示确认信息,或者可能使用通用对话框来获取表单的输入,然后在用户取消该对话框时中止。 (其中一些是业务逻辑,需要重构,但通常很难找到时间来重构需要它的所有内容。)

最佳答案

您始终可以在 OnCreate 处理程序中调用 Release,但这会导致表单快速显示然后关闭。不是很专业的事情。

这是另一个想法。让表单具有公共(public)函数或属性来返回它们是否确实要显示。那么你通常会在哪里

TheForm := TSomeForm.Create(Self);
TheForm.Show;

你会有

TheForm := TSomeForm.Create(Self);
if TheForm.ShouldAppear then
  TheForm.Show
else
  TheForm.Release;

话虽如此,任何其他编码方式(这样你就不会创建一个会立即被销毁的表单)肯定会更好。特别是如果您想在 UI 层和业务层之间保持清晰的分离,那么最好使用代码来决定表单是否要在表单外部显示。仅在做出决定后才创建表单。

关于delphi - 取消/中止在 Delphi/C++Builder 中创建新表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1358066/

相关文章:

file - 如何使用多个文件类型屏蔽来过滤文件列表框?

delphi - 本地化应用程序 : difference between gnugettext and dxgettext

security - Delphi 中的缓冲区溢出漏洞

multithreading - 为 Delphi 2010 推荐一个允许范围下载的 HTTP 组件

javascript - 如何在 angularjs 中清除或重置表单中的数据?

html - 页面字段定位表单冲突的处理方法

javascript - Lightbox 杀死 javascript 表单选项

c++ - 在一行中调用 TDataSet.Locate

c++builder - 抑制 Cppcheck 中自动绑定(bind)事件处理程序从未使用过的警告

c++builder - XE6 如何检查 UnicodeString 是否为 null?