注意:ここで紹介している方法は、.NET Framework 2.0以降でのみ使用できます。
「ToolStripとToolStripContainerを使って、ツールバーの位置をユーザーが変更できるようにする」で説明したように、ToolStripContainerコントロールを使えば、ToolStripコントロールをユーザーが上下左右の好きな位置に移動させることができるようになります。
実はToolStripContainerコントロールは、上下左右に1つずつ(計4つ)のToolStripPanelコントロールを持ち、さらに中央に1つのToolStripContentPanelコントロールを持っています。ToolStripがToolStripContainerの自由な位置に移動できるのは、実はこのToolStripPanelコントロールのおかげです。ですので、例えばフォームの上部だけにToolStripを配置したい場合は、わざわざToolStripContainerを使わなくても、1つのToolStripPanelをフォームの上部に配置するだけで十分です。
MDIの親フォームでは、DockプロパティをFillにしてToolStripContainerを使うことができません。なぜなら、ToolStripContainerの真ん中はToolStripContentPanelのため、子フォームを表示する場所がなくなってしまうのです。よってMDI親フォームでは、ToolStripContainerではなく、ToolStripPanelを使用します。
ToolStripPanelコントロールは、デフォルトでは、Visual Studioのツールボックスにありません。ツールボックスにToolStripPanelを表示するには、ツールボックスで右クリックしてコンテキストメニューを表示し、「アイテムの選択」を選択し、「ToolStripPanel」にチェックをつけて、OKをクリックします。
もちろんフォームデザイナを使用せずに、「コントロールを実行時に作成する」のように自分でコードを書くことによってもToolStripPanelをフォームに配置することができます。
以下にフォームの上部にToolStripPanelを1つだけ配置した例を示します。このコードは、フォームクラス内に書かれているものとします。
Private topToolStripPanel As ToolStripPanel Private toolStrip1 As ToolStrip Private toolStripButton1 As ToolStripButton 'フォームのLoadイベントハンドラ Private Sub Form1_Load(sender As Object, e As EventArgs) _ Handles MyBase.Load 'ToolStripPanelオブジェクトを作成 topToolStripPanel = New ToolStripPanel() 'レイアウトを停止 Me.SuspendLayout() topToolStripPanel.SuspendLayout() '水平方向にToolStripを並べるようにする topToolStripPanel.Orientation = Orientation.Horizontal '上部に配置する topToolStripPanel.Dock = DockStyle.Top 'ToolStripの作成 toolStrip1 = New ToolStrip() toolStrip1.SuspendLayout() 'ToolStripButtonオブジェクトを作成 toolStripButton1 = New ToolStripButton() toolStripButton1.Text = "保存" AddHandler toolStripButton1.Click, AddressOf toolStripButton1_Click 'ToolStripにアイテムを追加 toolStrip1.Items.Add(toolStripButton1) 'topToolStripPanelにtoolStrip1を追加 topToolStripPanel.Join(toolStrip1) 'または、 'topToolStripPanel.Controls.Add(toolStrip1) 'フォームにtoolStripContainer1を追加 Me.Controls.Add(topToolStripPanel) 'レイアウトを再開 topToolStripPanel.ResumeLayout(False) topToolStripPanel.PerformLayout() toolStrip1.ResumeLayout(False) toolStrip1.PerformLayout() Me.ResumeLayout(False) Me.PerformLayout() End Sub Private Sub toolStripButton1_Click(sender As Object, e As EventArgs) MessageBox.Show("toolStripButton1が押されました") End Sub
private ToolStripPanel topToolStripPanel; private ToolStrip toolStrip1; private ToolStripButton toolStripButton1; //フォームのLoadイベントハンドラ private void Form1_Load(object sender, EventArgs e) { //ToolStripPanelオブジェクトを作成 topToolStripPanel = new ToolStripPanel(); //レイアウトを停止 this.SuspendLayout(); topToolStripPanel.SuspendLayout(); //水平方向にToolStripを並べるようにする topToolStripPanel.Orientation = Orientation.Horizontal; //上部に配置する topToolStripPanel.Dock = DockStyle.Top; //ToolStripの作成 toolStrip1 = new ToolStrip(); toolStrip1.SuspendLayout(); //ToolStripButtonオブジェクトを作成 toolStripButton1 = new ToolStripButton(); toolStripButton1.Text = "保存"; toolStripButton1.Click += new EventHandler(toolStripButton1_Click); //ToolStripにアイテムを追加 toolStrip1.Items.Add(toolStripButton1); //topToolStripPanelにtoolStrip1を追加 topToolStripPanel.Join(toolStrip1); //または、 //topToolStripPanel.Controls.Add(toolStrip1); //フォームにtoolStripContainer1を追加 this.Controls.Add(topToolStripPanel); //レイアウトを再開 topToolStripPanel.ResumeLayout(false); topToolStripPanel.PerformLayout(); toolStrip1.ResumeLayout(false); toolStrip1.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); } private void toolStripButton1_Click(object sender, EventArgs e) { MessageBox.Show("toolStripButton1が押されました"); }
(この記事は、「.NETプログラミング研究」で紹介したものを基にしています。)