コンテナ・コントロールの利点

金宏 和實(かねひろ かずみ)

 富山県高岡市在住 株式会社イーザー副社長。開発と原稿書きに会社と自宅で愛用していたノートPCが壊れました。以前から,突然文字入力を受け付けなくなったり兆候はあったのです。ハードディスクかな,マザーボードかなと疑いつつ,まだ購入して3年経っていなかったので,せめて,Vista搭載の夏モデルが出るまでもってくれないかと念じていたのですが,とうとうBIOSが立ち上がらなくりました。否応なしにVistaで新生活を始めます。

 今回は,コンテナ・コントロールの使い方について説明したいと思います。コンテナ・コントロールを使うと,コンテナ上に配置したコントロールをまとめて扱うことができます。

 代表的なコンテナであるPanel(パネル)を使って,まとめて扱えると何がうれしいのかを確認しましょう(図1)。

図1●代表的なコンテナ・コントロールであるPanelを使った例
図1●代表的なコンテナ・コントロールであるPanelを使った例

 ツールボックスから,Panelを二つ配置し,それぞれのPanelの上に,TextBox(テキストボックス)とLabel(ラベル)を三つずつ配置しました。Panelがテキストボックスなどの複数のコントロールをグループとしてまとめます。

 「Panel1 表示/非表示」というボタン(Button1)と,「Panel2の項目をクリア」というボタン(Button2)を作成しました(リスト1)。


Public Class Form1
  Dim panel1Visi As Boolean = True
  Private Sub Button1_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click
    panel1Visi = Not (panel1Visi)
    Panel1.Visible = panel1Visi
  End Sub

  Private Sub Button2_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button2.Click
    For Each ctl As Control In Panel2.Controls
      If TypeOf ctl Is TextBox Then
        ctl.Text = ""
      End If
    Next
  End Sub
End Class
リスト1●[Panel1 表示/非表示]ボタン(Button1)と[Panel2の項目をクリア]ボタン(Button2)のClickイベントハンドラ

 panel1Visiというブール型の変数を,Panel1が表示状態か否かを判断するために使っています。Button1が押されたときにTrue/Falseの値を逆転させ,Panel1.Visibleプロパティに設定しています(図2)。

図2●[Panel1 表示/非表示]ボタンによってPanel1の表示/非表示が切り替わる
図2●[Panel1 表示/非表示]ボタンによってPanel1の表示/非表示が切り替わる

 Button1をクリックすると,Panel1が非表示になります(再度クリックすると表示)。コンテナであるPanel1が非表示になれば,当然その上に配置したTextBoxやLabelも非表示になります。グループのメンバーをまとめて非表示にすることができるので,コントロールを個別に非表示にするより効率的です。

 Button2のクリック時の処理は,Panel2上のテキストボックスに入力された文字列のクリア処理です。Panel2上のコントロールを一つ一つ調べ,コントロールのタイプがTextBoxだったら,Textプロパティをクリアしています。処理は個々のコントロールに対して行いますが,同じPanel上の各コントロールに対してという処理(For Each ctl As Control In Panel2.Controls)ができるのです。

 表1は,Panel以外の代表的なコンテナです。TabControlやGroupBoxはよく利用されています。FlowLayoutPanel,SplitContainer,TableLayoutPanelはVisual Studio(VS)2005で新たに追加されたコンテナ・コントロールです。もちろん,PanelにしてもTextBoxにしてもForm上に配置するわけですから,Form(フォーム)もコンテナと考えることができます。

表1●Panel以外の代表的なコンテナ・コントロール
コントロール名 機能 VS 2005から搭載
TabControl タブページを切り替えることができる
GroupBox RadioButtonをグループ化する
FlowLayoutPanel 流れるように順にコントロールを配置する
SplitContainer 二つの領域のサイズを変更できる
TableLayoutPanel 表形式にコントロールを配置する

TabControlとGroupBoxをおさらい

 TabControlやGroupBoxは,業務アプリケーションの開発では,なくてはならない存在です。例えば,売上-請求-入金を管理するようなアプリケーションでは,得意先の情報を登録,管理する必要があります。得意先コード,得意先名に始まって,住所や連絡先として必要な情報,請求した金額を回収するための情報…と,1件の得意先について記憶しておかなければならない項目は多岐にわたります。

 その際TabControlを使うと,項目のカテゴリ別に,TabPage(タブ・ページ)として複数のページに分類できるので便利です。TabControlを使わないで,フォームに全項目を配置したら,ごちゃごちゃした使いにくいフォームになってしまうでしょう。

図3●TabControlの利用例
図3●TabControlの利用例

図4●GroupBoxの利用例
図4●GroupBoxの利用例

 TabControlを配置して,タブを追加することで,小さい地面に2階建て,3階建ての家を建てるようにページを追加していくことができます。

 図5のGroupBoxは,回収方法をまとめている例です。RadioButtonが三つグループ化されています。GroupBox内のRadioButtonは,必ず択一になります。

図5●GroupBox内のRadioButtonは自動的に択一になる(図4参照)
図5●GroupBox内のRadioButtonは自動的に択一になる(図4参照)

 すなわち,銀行振込にチェックを付けると,それ以前にチェックされていたい項目が自動的にオフになります。プログラムでコントロールする必要がないので楽チンです。

 タブのラベル(Textプロパティ)をどこで設定するのか,少しわかりにくいので補足します。タブのラベルを設定するには,プロパティのTabPagesコレクションを開き,TabPageコレクションエディタでTabPageを選択し,Textプロパティに「得意先基本」のように入力します。

TabPageコレクションエディタでTabPageを選択
図A●TabPageコレクションエディタでTabPageを選択し,Textプロパティでタブのラベルを設定