2012-08-10 132 views
2

您好我正在使用超過100個表單的delphi應用程序。還有從形式A在delphi中創建表單時出錯

Unit B 

interace 

uses A; 

Type 
Form B = Class(Form A) 

End; 

衍生現在,當我嘗試在IDE中打開表格B I M得到的錯誤,一種形式的調用方式B「錯誤cerating形式:祖先爲TFormA未找到」。但是,當我打開表格A,然後嘗試形成B,然後我能夠打開表單沒有任何錯誤。 我無法找到它發生的原因。我錯過了什麼嗎?

+0

您是否使用IDE從FormA繼承FormB,或者只是手動完成它? – kludg 2012-08-10 15:50:43

+0

所以你正在使用窗體繼承。要記住兩件事。 dfm文件需要聲明「inherited TFormB」而不是「object TFormB」另一項是Delphi需要知道TFormA在創建TFormB之前所在的位置。我已經完成了這一段時間,如果我沒有記錯的話,當基本表單被添加到版本庫時,它會更好。 – GDF 2012-08-10 15:52:42

+0

@serg:沒有手動。 – Nalu 2012-08-10 15:54:14

回答

2

使用表單繼承時需要注意兩點。 dfm文件需要聲明「inherited TFormB」而不是「object TFormB」另一項是Delphi需要知道TFormA在創建TFormB之前所在的位置。已經有一段時間了,如果我沒有記錯,如果基本表單已被添加到存儲庫,效果會更好

由於您指出您手動確保dfm中的聲明使用如上所述,「繼承」而不是「對象」。要自己做以下改變

1)打開這兩種形式。 2)然後查看TFormB文本 3)將其更改爲繼承像下面

inherited FormB: TFormB 
     Caption = 'FormB' 
     PixelsPerInch = 96 
     TextHeight = 13 
    end 

// not 

    object FormB: TFormB 
     Caption = 'FormB' 
     PixelsPerInch = 96 
     TextHeight = 13 
    end 
+0

完成了更改並保存並試圖打開表單,但仍然是同樣的問題。 :( – Nalu 2012-08-10 16:05:49

+0

...以及我知道你需要上面的聲明爲您的窗體繼承正常工作......並且我知道IDE需要知道祖先,並在它可以加載您的後代之前加載它... I你可能只需要重新命名你的表單,嘗試使用IDE創建一個新的繼承表單,並複製你的組件和代碼.IDE窗體繼承機制應該完成你可能會丟失,我會備份我的工作,然後嘗試下一步,看看它是否解決了問題。 – GDF 2012-08-10 16:27:44

+2

@Naren - 你的項目文件是否包含'unit.pas'中的單元'{FormA}'? – 2012-08-10 16:34:07

1

您應該使用Delphi IDE提供的可視化表單繼承;我沒有Delphi 5,在Delphi XE中,它通過File-> New-> Other ...-> Inheritable Items來訪問。我相信它也可以在Delphi 5中使用,但可能來自不同的菜單項

+0

在Delphi 7中,例如['它在一個標籤上](http://i.imgur.com/xaLn0.png)表格命名爲當前項目。 – TLama 2012-08-11 18:49:50

0

描述我儘管在DFM文件中所有物質「繼承」有同樣的問題。

什麼解決了我的問題是通過右鍵單擊項目管理器 - 添加並選擇祖先文件,將祖先文件添加到項目中。