我有一个表格( fsMDIChild )。这是在TForm4.FormShow
:
if targetDatabase.hasItems then
不幸 OnShow在实例化时间接调用:
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2},
Unit3 in 'Unit3.pas' {Form3},
Unit4 in 'Unit4.pas' {Form4};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm4, Form4); // <-- calls TForm4.OnShow! Why?
Application.Run;
end.
我在ShowForm-Handler里放了一个Breakpoint。这是我的Stack-View的输出:
我的问题是:
答案 0 :(得分:2)
按照正常的方式,对于标准表格,你不会指望这种情况发生。很明显,项目中有一些代码会触发此行为。
作为一些一般性建议,您可以使用调试器找出发生这种情况的原因。
OnShow
事件处理程序中设置断点。 通过启用调试DCU,您可以确保获得包含VCL中功能的完整调用堆栈。按照调用堆栈计算事件触发的原因。
现在,额外的具体信息是有问题的表格是MDI儿童。它们不能隐形,因此立即显示。换句话说,您所观察到的行为是预期的。 MDI儿童始终可见。因此,OnShow
事件在施工期间会发生火灾。