现在,我在过去 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 时正确显示指定的颜色。