2009-08-14 5 views
0

私は1つがメインと他の2つのフォームを、持っているが継承されたフォームのmain.Letsは、私は、メインフォーム上の機能を持っていると言う:実行時に作成されたコントロールを継承する方法は?

procedure FormMain.CreateButton; 
begin 
    with TsButton.Create(Self) do begin 
    Width := 31; 
    Height := 31; 
    Left := 31; 
    Top := 31; 
    Visible := true; 
    Parent := Self; 
    end; 
end; 

通常メインフォーム上のすべてが継承されたフォームになりますが、この必要があります

私はmainFormからCreateButtonを呼び出しますが、ボタンはメインフォーム上にしかありません。

このボタンも継承できますか?

答えて

4

デザイン時と実行時には違いがあります。フォームデザイナはフォームの定義を作成し、実行時にインスタンス化します。あるフォームを別のフォームから継承すると、基本テンプレートが取り込まれて追加されます。しかし、フォームデザイナーフォームはクラス定義のようなテンプレートだけです。

実行時に、基本フォームと派生フォームをインスタンス化し、アプリケーションのリソースセクションに格納されているテンプレートから作成します。基本フォームのインスタンスに何かを追加すると、定義ではなく個々のインスタンスが変更されるため、もちろん別のインスタンスには表示されません。フォームにボタンを動的に追加する場合は、そのインスタンス(この場合は派生したフォーム)に個別にボタンを作成する必要があります。

2

「継承された」というのが通常の意味であれば、答えは「いいえ」です。 (通常は、IDEでメインフォームを作成した後、IDEでそのメインフォームの子孫を作成したということです)。

この場合、実行時に作成されたコントロールは継承ツリーの一部ではなく、子孫はそれについて何も知らない。子孫にも同じコードを手動で追加する必要があります。

あなたは正確に何を達成しようとしていますか?ボタンを作成するコードを書いているので、ボタンとベースフォームの両方でボタンが必要になることが事前に分かっている場合は、実際にそのボタンを先祖の上にドロップしないでください。

+0

ええ - そこに置いては見えないようにしてください。必要なときに表示するだけです。 –

1

これが継承される場合は、2つの形式で異なる処理を行う方法がありません。したがって、ランタイムの変更を継承する必要はありません!