2011-12-22 93 views
1

现在至少有300多种我在过去5年中创建的手动创建的表单,我从未见过这个问题。我当然有一个主要的形式,然后是一堆小的孩子形式。这些子表单不是自动创建的,它们是在我的代码中手动声明和创建的。这个项目还很不成熟,这意味着在这个项目中没有太多的代码可能会丢失一些东西。但问题是,我所做的只是创建窗体,将父窗体分配给主窗体,并且没有任何代码来显示窗体,无论如何它都会显示其自身。表单自动显示没有我告诉他们?

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

这就是我必须创建它的所有代码。绝对没有代码在实际的子表单中。它至少需要FControlPanel.Show才能看到,但由于某种原因,它仍然可见。

我确实有一种预感可能导致此行为开始。但我不能把两个和两个放在一起。我试图使用MDI表单功能,将表单保存在主窗体中。但是在一些试验/错误情况出现之后,我放弃了并重新设置了自己的属性。我改变的唯一属性是FormStyle - 我在fsMDIForm,fsNormal和fsStayOnTop之间切换的主要形式(用于试用)。我把孩子换成fsMDIChild。在我放弃之后,我将它们全部切换回默认的fsNormal。当这场“车展”开始发生时,这是在玩这个游戏之后。

此外,可能是一个重要的说明,这些子窗体是从主窗体继承而来的。这种主表格几乎没有代码,至少没有可能显示它的代码。我在任何代码中都没有告诉它显示这些子表单,但无论如何。而且我知道他们不是自动创建的。

我该做什么错了?

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

回答

6

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

+0

BINGO!非常感谢 - 我忘记了甚至有Visible属性的表单,我从来没有使用它...+1并且接受:D – 2011-12-22 00:53:20

+0

因此,在这种情况下,我假设'Visible'属性用于指定创建时是否可见?我一直使用窗体上的显示/隐藏... – 2011-12-22 00:55:35

+0

是的。我想它被用于自动创建的表单。 – ain 2011-12-22 00:57:19

0

您无法将MDIChild窗体中的Visible属性更改为False。

要纠正的MDIChild形式自动显示在Delphi 7,只需做到以下几点:

  • 打开项目 - >选项
  • 在“自动创建表单”选择每个MDI子窗体列表,然后单击在 “>”按钮上将窗体移动到“可用窗体”列表。
  • 确保只让您想要“自动创建”的窗体,例如MDI 主窗体,登录窗体和数据模块。

纳尔逊·桑托斯

相关问题