問題点としては、1Lの広口ボトルで作ったら、とにかく見た目が汚い。
そんな訳で今日はタブコントロールのお話です。ヨーグルトは一切関係ありません。 タブコントロールはこんな人ですね。ごった煮のツールを作る時には重宝します。
えッ?、普通に置くだけやん
昔 Win32API だけで作ってた頃は、ソースコードでタブを作って、その中にリソースエディタで作ったページを並べたり、タブを押した事に反応してページを入れ替えたり、相当メンドウだったんですが、今はフォームデザイナーで置くだけなんですね。タブはもちろん、各タブのタイトルやページの中身まで、全部フォームデザイナーだけでできてしまいます。オジサンびっくりだよ。
でもね、フォームデザイナーだけでタブの全ページをレイアウトをしてしまうと、1つのフォームクラスで全ページのコントロールを相手にしないといけません。これは相当ウザいです。大量のコントロールの名前を被らないように付けるのも一苦労だし。
大抵の場合、タブコントロールの各ページって完全に独立した機能なので、ページごとにクラスを分けたいですよね。
みんな違って、みんないい!
という事で調べてみたところ、各タブページごとに内容をまとめたユーザーコントロールを作って、それをメインフォームのタブコントロールに張り付ける、という作り方が定番らしい。 ユーザーコントロールはソリューションエクスプローラーから 「追加」 > 「新しい項目」 > 「ユーザーコントロール」 などで新規作成できます。新規作成すると、外枠のないフォームみたいのが出て来ますので、あとはフォームと同様にボタンなどを配置したり、機能を実装したりしましょう。なーんだ簡単じゃん!。.NET 様様だね。あとは貼るだけ!。簡単、かんた‥‥ぅうん?
そして最後に、作ったユーザーコントロールをメインフォームのタブに貼りつけるだけなのですが、なんかどうにも張り付け方が分からないので、調べてみたところ、プロジェクト内で作成したユーザーコントロールは、ツールボックスに自動的に追加されるので、あとはボタンなどと同様に貼りつけるだけです!
‥‥と、どこのサイトも当然のように書いてあるんですけどね。ツールボックスのどこをいじっても、自作のユーザーコントロールは出て来ません。なんで?
さらに調べること数時間、結局同じことで詰まってた人はほぼ居なかったんですが、なぜかツールボックスへの自動追加機能はデフォルトでオフ になってました。
Visual Studio のメニューから 「ツール」 > 「オプション」を開いて、「Windowsフォームデザイナー」 > 「ツールボックス」 > 「AutoToolboxPopulate」 を True にしてください。
これでめでたくツールボックスからぽいっと貼りつけられるようになりますが、なんでこの機能がデフォルト False になってんですかね。そしてこれ以外の方法でフォームに貼りつけられる手段は結局見つけられなかったし。他に悩んでる人がほぼ居ないところを見ると、最近のバージョンではデフォルト True だったりするのかなぁ。
ちなみに、ソースコードで貼りつけたいのなら、フォームのコンストラクタで以下みたいに書けば貼りつけられるんですけどね。フォームデザイナーで貼りつけらんないとかありえないので意地になって調べてたら1日が終わってしまった。
using System.Windows.Forms; // タブコントロールにタブページを追加 var tabPage = new System.Windows.Forms.TabPage( "タブページ名" ); tabControl1.Controls.Add( tabPage ); // タブページにページの内容(UserControl派生)を追加 var tabContents = new MyTabPage(); tabPage.Controls.Add( tabContents ); // タブページのサイズに合わせて広げたい場合はこの設定 tabContents.Dock = System.Windows.Forms.DockStyle.Fill;
しっかし、それ以外についても、ここ1ヶ月くらい真面目に Visual Studio 2010 とつきあって来た訳ですが、どうにもコイツぁ駄目な奴だとしか思えなくなってきたので、諦めて 2013 を試してみようかなぁ。せっかく今ならタダで使えるんだし。