【发布时间】:2014-08-18 20:14:44
【问题描述】:
我正在尝试在 Delphi XE6 中创建一个包含 2 个表单的应用程序。根据ParamStr 设置,Form2 可能会或可能不会在 Form1 之前显示。
在快速测试应用中,两个表单都是在调用 Form1.Show 之前创建的 - 在此期间是否显示 Form2
procedure TForm1.FormShow(Sender: TObject);
begin
if ParamStr(1) = 'foo' then
Form2.FooShow;
end;
procedure TForm2.FooShow;
begin
ShowModal;
end;
但是在“真实”应用程序中我看到了不同的行为。
在这种情况下,只要调用 Application.CreateForm(TForm1, Form1),就会调用 Form1.Show。这是在创建 Form2 之前,这会导致问题,因为 Form2 在需要时不存在。
任何解释为什么行为会有所不同?我是否错过了隐藏在 Project>Options
中某处的设置【问题讨论】:
-
我已经使用新的 Forms 重新创建了应用程序,现在它的行为符合预期 - 似乎有一个设置潜入到原来的某个地方
-
正如我在answer 中指出的那样:“潜入”的设置是
Form1上的Visible属性。我怀疑您是否编写了额外的代码来在创建时显式显示表单,否则您会更轻松地解决问题。这留下了唯一会导致表单在创建后立即显示的情况是,如果在设计时属性Visible = True。 -
Visible 在应用程序的“工作”版本中设置为 true。
-
您声称:“Visible 在应用程序的“工作”版本中设置为 true。”说白了就是绝对垃圾!除非您忽略了有关“工作”快速测试的非常重要的事情,否则转到
Form1并在设计时属性编辑器中设置Visible=True将导致访问冲突 当TForm1.FormShow尝试显示Form2时。我只能假设您错误地认为 Visible 是真的,因为Form1在您运行应用程序时自动显示。 提醒:主窗体始终自动显示,即使 Visible 为 false。 -
Dan,认真地尝试在您的问题中按照您自己的说明,并且在
Form1的设计时的属性编辑器。您将观察到:(1)Form1在创建后立即显示。 (2) 即在创建Form2之前。 (3) 如果TForm1.FormShow尝试显示Form2,这将导致访问冲突。
标签: forms delphi delphi-xe6