2011-10-03 55 views
2

創建動態表單我已經把這段代碼用於創建動態表單不能在Delphi 7

unit Unit1; 

interface 

uses 
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
    Dialogs, StdCtrls; 

    type 
    TForm1 = class(TForm) 
    Button1: TButton; 
    procedure Button1Click(Sender: TObject); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 


    type 
    TForm2 = class(TForm) 
    private 
     { Private declarations } 
    public 
     { Public declarations } 
    end; 

    var 
    Form2: TForm2; 
    Form1: TForm1; 

implementation 

    {$R *.dfm} 

    procedure TForm1.Button1Click(Sender: TObject); 
var 
    a:TForm2; 
begin 
    a:=TForm2.Create(nil); 
    end; 

結束。

我得到一個錯誤,說資源tform2無法找到。我必須做什麼?

感謝

+0

這不完全是標記問題的重複,雖然它們是相關的。 – user30478

回答

3

您正在調用從DFM加載TForm內容的TForm.Create()構造函數,但您的項目沒有TForm2的DFM,這就是爲什麼您會收到資源錯誤。要跳過它,您需要使用TForm.CreateNew()構造函數。

procedure TForm1.Button1Click(Sender: TObject); 
var 
    a: TForm2; 
begin 
    a := TForm2.CreateNew(nil, 0); 
    ... 
end; 
5

在Delphi中必須聲明的單位只有一種形式,也是每個表單需要一個DFM文件,該文件存儲表單定義和組件的屬性。在您的代碼中,您遇到此錯誤是因爲應用程序無法找到TForm2表單的dfm文件。所以要解決這個問題,只需在一個單獨的單元中創建一個新的表單(TForm2),然後將該單元的名稱添加到需要調用TForm2的單元中。

+1

對於刪除新單元中的$ R非常重要。 –

+0

在這個問題中沒有跡象表明第二個表格類應該有dfm。您可以在單個單元中聲明儘可能多的表單類。 –

+1

否定。答案中的MUST條款是不正確的,沒有這樣的限制。另見TCustomForm.CreateNew –