2009-08-26 7 views
2

メインフォームにページコントロールがあり、子フォームにページコントロールがあります。 ドッキング機能を使用してメインフォーム内に子フォームを配置します。子フォームのタブをメインフォームにマージする

私はMDIスタイルに

を使用していない今、両方のフォームは、ページのコントロールのタブを持っていると私は、メインフォームページのコントロールに子フォーム タブをマージする必要があり、それを行うための最善の方法は何ですか?

答えて

2

これは、あなたのニーズに合っているかどうかにかかわらず、かなり単純なアプローチです。あなたがマージする必要がそれぞれの子のタブページの場合

  • コントロールで以上の子 タブ

  • 反復に対応するメインフォームページ コントロール内のタブを作成します。 子タブをクリックして のプロパティをタブページに設定する

他のコントロールの子であるコントロールを扱う必要はありません。例えばあなたの子タブにグループボックスがある場合、その親を変更すると、とその中のすべてのコントロールが新しい親にとなります。

いつでもタブを「解除」する必要がある場合は、コントロールがどこから来たのかを把握するためのメカニズムを工夫する必要があります。を必要に応じて復元できます。

それはalClientに設定合わせ財産だとあなたは、子のタブでTPanelを置くことができ、物事が少し容易にするために。パネルのすべてのコントロールをそのパネルのタブに置き、マージ/アンマージする必要がある場合は、パネルコントロールのだけを設定する必要があります。

+0

オリジナルのコンテンツがデザインタイムに置かれている場合、この回答は、所有権を考慮しないため、やや危険です。 [パネルを切り離して別のウィンドウに表示する方法]を参照してください。(http://stackoverflow.com/q/6461715/757830) – NGLN

4

ページコントロール上の複数のタブを処理する最も簡単で最善の方法は、通常フレームを使用することです。各タブの内容を取り出し、各タブの個々のフレームに取り込みます。共有コンポーネント、状態、コードをデータモジュールに移動します。次に、これらのフレームをページコントロールのタブシートに配置します。

0

私はちょうど

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    while Form2.PageControl1.PageCount > 0 do 
    Form2.PageControl1.Pages[0].PageControl := PageControl1; 
end; 

を試してみましたが、それがうまく働きました。明白な何かを見逃しているのですか、なぜ誰もがそのような洗練されたソリューションを提供していますか? :-)

+0

オリジナルのコンテンツがデザイン時に配置されている場合、この回答は多少危険です。所有権を考慮する。 [パネルを切り離して別のウィンドウに表示する方法](http://stackoverflow.com/q/6461715/757830)を参照してください。 – NGLN

関連する問題