none
TabControlでTabPageを複写追加する方法 RRS feed

  • 質問

  • TabControlで、動的に新規TabPageを追加していく機能を仮で作成しました。
    そのTabControlには、ベースとなるTabPageが1つデザイナで作成してあります。

    TabPageを追加する際に、ベースTabPageに配置してあるコントロール(GroupBoxなど)を
    すべて複写するにはどうしたらよいのでしょうか?
    ベースTabPageそのものを複写して追加するといったことは可能なんでしょうか?

    表現が不適切かもしれませんが、宜しくお願い致します。
    2009年5月14日 8:25

回答

  • TabPageを追加する際に、ベースTabPageに配置してあるコントロール(GroupBoxなど)を
    すべて複写するにはどうしたらよいのでしょうか?
    ベースTabPageそのものを複写して追加するといったことは可能なんでしょうか?
    正直、そのまま実現するのは難しいです。
    ユーザコントロールを検討してみませんか?

    難しい理由としては、TabPageの中にさらにTabControlが貼られていたり、その中にGroupBoxやPanelがあったりすると、それらの上に貼り付けられているコントロールも全て列挙して、コピーして、新しく作ったTabPageに貼り付けていかないといけません。
    子コントロールを全てフォローするのは大変ですし、それらのコントロールにイベントを割り付ける等のフォローやイベントが呼び出されたときにどのコントロールが影響するかとか考えるのも大変です。


    これに対して、TabPageに貼り付けてあるコントロールを全てユーザコントロールとしてくくり出すと、新しくTabPageを作って、その上にユーザコントロールを1つ作って貼り付けるだけということで、複製に近い処理は少なく済みます。

    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    • 回答としてマーク WINAMA 2009年5月15日 0:54
    2009年5月14日 14:31
    モデレータ
  • TabControlで、動的に新規TabPageを追加していく機能を仮で作成しました。
    そのTabControlには、ベースとなるTabPageが1つデザイナで作成してあります。

    TabPageを追加する際に、ベースTabPageに配置してあるコントロール(GroupBoxなど)を
    すべて複写するにはどうしたらよいのでしょうか?
    ベースTabPageそのものを複写して追加するといったことは可能なんでしょうか?

    デザイナで作成したのであれば、そのコードがInitializeComponent()にありますので、そのコードを拝借して新しいTabPage上にコントロールを作成することで実現することもできます。もちろん、デザイナでコントロールをいじればInitializeComponent()内のコードは変化してしまいますから、その度に新たにTabPageを作成するコードもそれに合わせて変更しなければなりませんが・・・

    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク WINAMA 2009年5月15日 0:54
    • 回答としてマークされていない WINAMA 2009年5月15日 5:32
    • 回答としてマーク WINAMA 2009年5月15日 5:33
    2009年5月14日 15:23
    モデレータ

すべての返信

  • TabPageを追加する際に、ベースTabPageに配置してあるコントロール(GroupBoxなど)を
    すべて複写するにはどうしたらよいのでしょうか?
    ベースTabPageそのものを複写して追加するといったことは可能なんでしょうか?
    正直、そのまま実現するのは難しいです。
    ユーザコントロールを検討してみませんか?

    難しい理由としては、TabPageの中にさらにTabControlが貼られていたり、その中にGroupBoxやPanelがあったりすると、それらの上に貼り付けられているコントロールも全て列挙して、コピーして、新しく作ったTabPageに貼り付けていかないといけません。
    子コントロールを全てフォローするのは大変ですし、それらのコントロールにイベントを割り付ける等のフォローやイベントが呼び出されたときにどのコントロールが影響するかとか考えるのも大変です。


    これに対して、TabPageに貼り付けてあるコントロールを全てユーザコントロールとしてくくり出すと、新しくTabPageを作って、その上にユーザコントロールを1つ作って貼り付けるだけということで、複製に近い処理は少なく済みます。

    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    • 回答としてマーク WINAMA 2009年5月15日 0:54
    2009年5月14日 14:31
    モデレータ
  • TabControlで、動的に新規TabPageを追加していく機能を仮で作成しました。
    そのTabControlには、ベースとなるTabPageが1つデザイナで作成してあります。

    TabPageを追加する際に、ベースTabPageに配置してあるコントロール(GroupBoxなど)を
    すべて複写するにはどうしたらよいのでしょうか?
    ベースTabPageそのものを複写して追加するといったことは可能なんでしょうか?

    デザイナで作成したのであれば、そのコードがInitializeComponent()にありますので、そのコードを拝借して新しいTabPage上にコントロールを作成することで実現することもできます。もちろん、デザイナでコントロールをいじればInitializeComponent()内のコードは変化してしまいますから、その度に新たにTabPageを作成するコードもそれに合わせて変更しなければなりませんが・・・

    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク WINAMA 2009年5月15日 0:54
    • 回答としてマークされていない WINAMA 2009年5月15日 5:32
    • 回答としてマーク WINAMA 2009年5月15日 5:33
    2009年5月14日 15:23
    モデレータ
  • 正直、そのまま実現するのは難しいです。
    ユーザコントロールを検討してみませんか?

    難しい理由としては、TabPageの中にさらにTabControlが貼られていたり、その中にGroupBoxやPanelがあったりすると、それらの上に貼り付けられているコントロールも全て列挙して、コピーして、新しく作ったTabPageに貼り付けていかないといけません。
    子コントロールを全てフォローするのは大変ですし、それらのコントロールにイベントを割り付ける等のフォローやイベントが呼び出されたときにどのコントロールが影響するかとか考えるのも大変です。


    これに対して、TabPageに貼り付けてあるコントロールを全てユーザコントロールとしてくくり出すと、新しくTabPageを作って、その上にユーザコントロールを1つ作って貼り付けるだけということで、複製に近い処理は少なく済みます。

    まさしく、GroupBox等が複雑に配置されています。
    後学のためにも、ユーザコントロールにチャレンジしてみたいと思います。

    ありがとうございました。
    2009年5月15日 0:57
  • デザイナで作成したのであれば、そのコードがInitializeComponent()にありますので、そのコードを拝借して新しいTabPage上にコントロールを作成することで実現することもできます。
    デザイナで作成しているので、これでも実現できますね^^
    ユーザコントロールの作成につまずいたら、この方法を試してみたいと思います。

    ありがとうございました。
    2009年5月15日 0:58