DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

ToolStripContainer上のToolStripの位置をプログラムで変更する

注意:ここで紹介している方法は、.NET Framework 2.0以降でのみ使用できます。

ToolStripContainerコントロール(または、ToolStripPanelコントロール)に配置されているToolStripコントロールの位置をプログラムで変更するには、ToolStripPanel.Joinメソッドや、ToolStrip.Locationプロパティを使います。

別のToolStripPanelに移動する

例えばToolStripContainerの上部のToolStripPanelに配置されているToolStripを下や左右など違う場所に移動するには、ToolStripPanel.Joinメソッドを使います。

以下の例では、ToolStrip1をToolStripContainer1の下部のToolStripPanelに移動させています。ここでは事前にToolStrip1が下部にあるか調べていますが、下部にあるToolStrip1をJoinメソッドで下部に移動してもエラーになりません。ただ、ToolStrip1の位置が変更される可能性があります。

別のToolStripPanelに移動する

VB.NET
コードを隠すコードを選択
'ToolStrip1がToolStripContainer1の下にあるか調べる
If Not ToolStripContainer1.BottomToolStripPanel.Contains(ToolStrip1) Then
    '下にない時は、下に移動する
    ToolStripContainer1.BottomToolStripPanel.Join(ToolStrip1)
End If
C#
コードを隠すコードを選択
//ToolStrip1がToolStripContainer1の下にあるか調べる
if (!ToolStripContainer1.BottomToolStripPanel.Contains(ToolStrip1))
{
    //下にない時は、下に移動する
    ToolStripContainer1.BottomToolStripPanel.Join(ToolStrip1);
}

移動する行を指定する

Joinメソッドには、移動する行を指定することもできます。

以下の例では、ToolStrip1をToolStripContainer1の上部の一番最後の行に移動させています。

別の行に移動する

VB.NET
コードを隠すコードを選択
'ToolStrip1をToolStripContainer1の上部の最後の行に移動する
'2番目のパラメータに実際の行数より大きい値を指定しても、最後に移動する
ToolStripContainer1.TopToolStripPanel.Join(ToolStrip1,
    ToolStripContainer1.TopToolStripPanel.Controls.Count)
C#
コードを隠すコードを選択
//ToolStrip1をToolStripContainer1の上部の最後の行に移動する
//2番目のパラメータに実際の行数より大きい値を指定しても、最後に移動する
ToolStripContainer1.TopToolStripPanel.Join(ToolStrip1,
    ToolStripContainer1.TopToolStripPanel.Controls.Count);

このようにToolStripを最後の行に移動させる時はうまく行きますが、それ以外ではおかしな動作をしました。色々試した結果、現在よりも後ろの行に移動する時はうまく行くようですが、それ以外では大抵うまく行きませんでした。

移動する座標を指定する

Joinメソッドには、移動する座標を指定することもできます。また、同じToolStripPanel内で移動するならば、ToolStrip.Locationプロパティで移動させることもできます。

言うまでもないかもしれませんが、ToolStripPanelはToolStripを自動で整列させるため、移動先の座標を指定してもその通りの位置に移動するとは限りません。ToolStripPanelがどのようにToolStripを整列れるさせるかは、実際にマウスでToolStripをつかんで移動させてみると分かります。つまり、ToolStripはToolStripPanel内のどこかの行に属することになるため、その中間の位置に配置できませんし(上か下のどちらかの行に配置されます)、ToolStripが一つもない行も許されず、そのような位置を指定しても行が詰められます(例えば、現在1行しかないのに3行目に移動させようとしても、2行目にしか移動しせん)。また、ToolStripPanelの幅以上の位置を指定しても、適当な位置に戻されてしまいます。

ToolStrip1をToolStripContainer1の先頭に移動する例を示します。しかしこのようにしても、ToolStrip1がすでに1行目にあり、ToolStrip1の前に別のToolStripがある場合は、先頭になりませんでした。

VB.NET
コードを隠すコードを選択
'ToolStrip1を先頭に移動する
ToolStrip1.Location = New Point(0, 0)

'ToolStrip1をToolStripContainer1の上部の先頭に移動する
ToolStripContainer1.TopToolStripPanel.Join(ToolStrip1, 0, 0)
C#
コードを隠すコードを選択
//ToolStrip1を先頭に移動する
ToolStrip1.Location = new Point(0, 0);

//ToolStrip1をToolStripContainer1の上部の先頭に移動する
ToolStripContainer1.TopToolStripPanel.Join(ToolStrip1, 0, 0);
  • 履歴:
  • 2012/02/08 大幅な書き直し。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。