2017-04-17 16 views
-1

動的フォームを作成する直前に既存フォームから継承する方法はありますか? 私はtobjects.create()を使って新しいフォームを動的に作成する方法を知っていますが、新しいフォームの作成時にそのフォームを継承することによって、すでに作成されたフォームとまったく同じように機能するフォームを作成する必要があります。新しいフォームを動的に作成し、Delphiの既存のフォームからフォームを継承する方法

+0

* *継承ではありません。 –

答えて

1
var 
     Form2: TForm1; 
    begin 
     Form2 := TForm1.create(nil); 
     try 
      // now form2 is exactly "like" form1 when it was created 
      Form2.Top := Form1.Top; 
      Form2.Left := Form1.Left; 
      // now some of Form2's properties are like Form1's are now            
      Form2.ShowModal; 
     finally 
      Form2.Free; 
     end; 

「好き」とはどういう意味ですか? Form1が作成されてから実行時に変更があった場合は、作成した後に同じ実行時の変更をform2に適用する必要があります。継承はそれをあなたのためにすることはできません。継承はデータではなく「コンテナ」です。フォームの "データ"をコピーするには、form2のすべてのプロパティ値をform1のプロパティ値に設定する必要があるプロシージャを記述する必要があります。または、あなたが気にしているプロパティをコピーしてください。

procedure CallChild; 
var MyForm: TMyForm; 
begin 
    MyForm:= TMyForm.Create(nil); 
    try  
    MyForm.ShowModal; 
    finally 
    MyForm.Free; 
    end; 
end; 
+0

私は指定されたフォームに切り替えることができるかどうかを知るためにこの質問をしました。 –

+0

たとえば:あるイベントでは、編集ボックスで指定したフォームに切り替える必要があります –

+0

別の質問をする! – nolaspeaker

0

は、子の使用を作成するには、この

interface 
uses Forms, SysUtils, Classes, Controls; 

type 
    TCommonFormClass = class of TCommonForm; 
    TCommonForm = class(TForm) 
    private 
     // Private declaration 
    public 
     // Public declaration 
     constructor Create(Sender: TComponent); virtual; 
    end; 

implementation 

constructor TCommonForm.Create(Sender: TComponent); 
begin 
    inherited Create(Sender); 
    // do other 
end; 

とあなたの子フォームがこの

type 
    TMyForm = class(TCommonForm) 
    private 
     // Private declaration 
    public 
     // Public declaration 
    end; 

implementation 

{$R *.dfm} 

end. 

のようになりますしてみてください。それは単純に*新しいインスタンス*を作成することです。アプリを実行するたびに実行されます。 `Application.CreateForm`はあなたのプロジェクトの中でそれを行い、あなたは` NewForm:= TForm1.Create() `を使ってコード内でそれを行い、` TForm1`をあなたが使いたいフォームクラスの名前に置き換えます。

関連する問題