2011-12-22 54 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 主窗體,登錄窗體和數據模塊。

納爾遜·桑托斯

相關問題