- - PR -
タブページ内にあるコントロールすべてをコピーしたい
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-10-22 15:58
いつもお世話になっております。
VisualStdio2005(C++)、Windowsフォームアプリケーションで タブコントロールをフォーム上に配置し、デフォルト表示はタブページが1つとなっているフォームを作成しました。 フォーム実行中にタブの追加を行うとき、デフォルト表示となっているタブページ(tabpage1)を そのままコピーして、新しくタブページを新規追加したいのですが、 コードでどのように記述していいかわかりません。 タブを追加するのみであれば、 tabControl1->TabPages->Add(""); となるようですが、 tabpage1内にある複数のコントロールをそのままtabpage2にコピーして 使いたい場合、どのようにコードを記述していいかわかりません。 どなたかご教授していただければと思います。 よろしくお願い致します。 MSDNフォーラムにて別の方が似たような質問しており、ある方が MemberwiseCloneメソッドを使う手法を提示していました。 そちらの手法を使用して解決できるのか、解決できるのであればどのように使うかわからなく質問させていただきました。 | ||||||||||||
|
投稿日時: 2007-10-22 16:46
C++/CLI でしょうか?
単に違うページでも同じものを使いたいのであれば、TabPage のコンテナに追加するのではなく、TabPage と同じ位置に載せるようなイメージで配置した方が楽です。 そうではなくあくまで TabPage 全体のコピーに拘りたい場合は、TabPage 上の Controls を列挙し、列挙した要素の型を動的に生成してからプロパティなどのメンバをすべて適切にコピーする (というよりは設定する) という方法しか思いつきません。 型についてはリフレクションに頼った方が良い場面になるでしょう。 MemberwiseClone メソッドについてですが、派生クラスを作る必要があるのはともかく。 NativeHandle などなどコピーされてはまずいものが含まれているため、この場面では使い難いと思われます。 結局手動で書くハメになりそうです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2007-10-22 17:01
じゃんぬねっと様。ご回答どうもありがとうございます。 また、いつもお世話になっております。 実はMSDNフォーラムで、別な方の質問に対する回答はじゃんぬねっと様がしていました。 もしかして、この発言を見て回答していただけたらと、淡い希望を抱いていました。 大変助かります。 さて、本題ですがC++/CLIでの開発をしています。 tabpage1内に存在するコントロールすべてと同じものを、 tabpage2、tabpage3・・・tabpage[n]使用したいために、 n個あるタブページ数分、コードでなんとかできないかと考えていました。 1つのタブページでは、パネル、ラベル、チェックドリストボックス、ピクチャボックスなど たくさんのコントロールがあり、これらのコントロールをコード上で 新しくタブページが作成されるたびにtabpage1と同じ配置でコントロールが表示できないものかと悩んでいました。 >列挙した要素の型を動的に生成してからプロパティなどのメンバをすべて適切にコピーする (というよりは設定する) という方法しか思いつきません。 コピーする手法について、ちょっと調査していたのですが、 MSDN等で探すもどのようなメソッドを使っていいかわかりません。 手法についてご教授していただけないでしょうか。 | ||||||||||||
|
投稿日時: 2007-10-22 18:54
すみません。 あれは何も考えていないダメダメな回答です。
単に同じ機能を提供したいかつ TabPage にどうして配置したいというのであれば、UserControl をコンテナとした複合コントロールを使う (作る) のが賢明だと思います。
軽く説明しますと、
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2007-10-25 18:52
お世話になっております。
別作業、当問題の調査等、多忙につき返事が遅れました。すみません。
UserControlを使う方向で調査していました。 以下のMSDNを参考にしてたのですが、よくわかりませんでした。 http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.usercontrol(VS.80).aspx 上記のサンプルは複数のアプリケーションで再利用するサンプルですが、 私の場合は、同一アプリケーション内においてのことですので イメージがちょっと沸きませんでした。 もう少しご教授していただけないでしょうか。 物分り悪くて申し訳ありません。 | ||||||||||||
|
投稿日時: 2007-10-25 19:31
Dim x As New TextBox Dim y As New TextBox これでテキストボックスが2つできますよね。 それがユーザーコントロールというだけですよ。 今までの説明との違いは、全コントロールを列挙したり型を判断したりしなくてよいということだけです。 各コントロールがユーザーコントロール内にいるわけですのでそれらについては考える必要が無くなるということ。 タブの追加と同時にユーザーコントロールのインスタンスを作って、タブページに追加して位置調整して終わり。 | ||||||||||||
|
投稿日時: 2007-10-25 21:29
お世話になります。 ご回答いただいたところ、恐縮ですがC++/CLIではどのようになりますか? | ||||||||||||
|
投稿日時: 2007-10-26 00:41
まどかさんの書き込みにあるコードはあくまでイメージであり、"それがユーザーコントロールというだけですよ。" が主旨になります。 ですので、C++/CLI で実際に TextBox を配置してマネればわかるかと思います。 ただ VB の例からだとそれもわからない人がいるのかもしれませんね。
こうなります。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |