表格自动显示,我没有告诉他们?

时间:2011-12-22 00:42:48

标签: delphi delphi-7 mdi tform

现在,我在过去5年中创建了至少300多种手动创建的表单,我从未见过这个问题。我当然有一个主要形式,然后是一堆较小的儿童形式。这些子表单不是自动创建的,它们是在我的代码中手动声明和创建的。这个项目还为时尚早,这意味着在这个项目中没有那么多我可能会遗漏的东西。但问题是,我所做的只是创建表单,将父表单分配给主表单,并且没有任何代码来显示表单,无论如何都会显示自己的表单。

FControlPanel:= TfrmControlPanel.Create(nil);
FControlPanel.Parent:= Self;

这就是我创建它的所有代码。绝对没有代码在实际的子窗体中。至少应该FControlPanel.Show才能看到它,但出于某种原因它仍然是可见的。

我确实有预感可能会导致这种行为开始。但我不能把两个和两个放在一起。我试图使用MDI表单功能,以保持表单在主窗体中。但在经过多次试验/错误情景后,我放弃并重新设置了我的属性。我改变的唯一属性是FormStyle - 我在fsMDIForm,fsNormal和fsStayOnTop之间切换(用于试验)的主要形式。孩子表单我将它们切换到fsMDIChild。在我放弃之后,我将它们全部切换回默认值fsNormal。在这个“车展”开始发生之后,就是在这之后。

此外,可能是一个重要的注释,这些子表单是从主表单继承的。这个主表单实际上也没有代码,至少没有代码可以显示它。在我的任何代码中,我都没有告诉它显示这些子表单,但无论如何它都可以。我知道他们不会自动创作。

我做错了什么?

PS - 一般来说实现MDI的问题还有另外一个问题,我不是在询问MDI,但可能是导致这种情况发生的原因,因为已知改变组件的属性会永久性地切换组件的内部属性例如,在TPanel上,将“ParentBackground”切换为true然后再返回false会导致它在使用XPMan时正确显示指定的颜色。

2 个答案:

答案 0 :(得分:6)

IIRC将表单的样式设置为fsMDIChild,将表单的Visible属性更改为True。因此,现在无论何时创建表单,默认情况下都可以看到...将表单Visible属性更改回False,它应该结束“自动显示”行为。

答案 1 :(得分:0)

您无法在MDIChild表单中将Visible属性更改为False。

要在Delphi 7中更正MDIChild表单的自动显示,请执行以下操作:

  • 打开项目 - >选项
  • 在"自动创建表单"中选择每个MDI子表单。列表并单击 ">"按钮将表单移动到"可用表单"列表。
  • 确保只允许您希望成为"自动创建",就像MDI一样 例如,主表单,登录表单和数据模块。

Nelson Santos