メインフォームにページコントロールがあり、子フォームにページコントロールがあります。ドッキング機能を使用して、子フォームをメインフォーム内に配置します。
MDIスタイルを使用していません
これで、両方のフォームにページコントロールのタブがあり、子フォームのタブをメインフォームのページコントロールにマージする必要があります。これを行うための最良の方法は何ですか?
メインフォームにページコントロールがあり、子フォームにページコントロールがあります。ドッキング機能を使用して、子フォームをメインフォーム内に配置します。
MDIスタイルを使用していません
これで、両方のフォームにページコントロールのタブがあり、子フォームのタブをメインフォームのページコントロールにマージする必要があります。これを行うための最良の方法は何ですか?
ページコントロールの複数のタブを処理する最も簡単で最良の方法は、通常、フレームを使用することです。各タブの内容を取得し、それらを各タブの個別のフレームに分解します。共有コンポーネント、状態、コードをデータモジュールに移動します。次に、それらのフレームをページコントロールのタブシートに配置します。
これはかなり単純なアプローチであり、ニーズに合う場合と合わない場合があります。
子タブページごとに、マージする必要があります。
子タブに対応するメインフォームページコントロールにタブを作成します
子タブのコントロールを繰り返し処理し、 Parent プロパティを作成したタブページに変更します
他のコントロールの子であるコントロールを処理する必要はありません。たとえば、子タブにグループボックスがある場合、その親を変更すると、グループボックスとその中のすべてのコントロールの両方が新しい親に移動します。
いつでもタブを「マージ解除」できるようにする必要がある場合は、必要に応じて元の親を復元できるように、コントロールがどこから来たかを追跡するメカニズムを考案する必要があります。
少し簡単にするために、 AlignプロパティをalClientに設定して、 TPanelを子タブに配置できます。そのパネルのタブにすべてのコントロールを配置し、マージ/マージ解除する必要がある場合は、パネルコントロールの親を設定するだけで済みます。
試してみました
procedure TForm1.Button1Click(Sender: TObject);
begin
while Form2.PageControl1.PageCount > 0 do
Form2.PageControl1.Pages[0].PageControl := PageControl1;
end;
そしてそれはうまくいきました。私は明らかな何かを見逃しているのですか、それともなぜ誰もがそのような洗練されたソリューションを提供しているのですか?:-)