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

ToolStrip(ツールバー、メニュー、ステータスバー)のオーバーフローを有効にする

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

ToolStripコントロールの幅をだんだん狭めていき、すべてのToolStripItemを表示しきれなくなると、ToolStripの右側に下矢印のボタンが表示され、そのボタンを押すと、ToolStripに表示しきれなくなったToolStripItemがメニュー表示されます。この時、この下矢印のボタンを「オーバーフローボタン」(あるいは「オーバーフローシェブロン」)といい、ToolStripItemがオーバーフローボタンのメニュー(オーバーフローメニュー)に入ることを「オーバーフロー(状態になった)」といいます。

オーバーフロー

オーバーフロー機能を有効にするには、ToolStripのCanOverflowプロパティがTrueで、LayoutStyleプロパティが「StackWithOverflow」の付く値(StackWithOverflow、HorizontalStackWithOverflow、VerticalStackWithOverflowのどれか)である必要があります。ToolStripコントロールの場合は、デフォルトでCanOverflowプロパティがTrueで、LayoutStyleプロパティがHorizontalStackWithOverflowですので、オーバーフロー機能は有効です。

また、ToolStripItemをオーバーフローメニューに移動させるかをToolStripItem.Overflowプロパティで指定できます。OverflowプロパティがAsNeededの時は必要な時のみ移動させ、Alwaysの時は常にオーバーフローメニューに表示し、Neverの時はオーバーフローメニューに移動せずに、ToolStripに収まらなくなったら、表示されなくなります。デフォルトでOverflowプロパティはAsNeededですので、必要なときだけオーバーフローメニューに移動します。

MenuStripコントロールやStatusStripコントロールでも同様の方法でオーバーフロー機能を有効にすることができます。しかしこれらのコントロールではフォームデザイナのプロパティウィンドウにCanOverflowプロパティが表示されませんので、自分でコードを書いてCanOverflowプロパティをTrueにする必要があります。また、ToolStripMenuItemのOverflowプロパティがデフォルトでNever、StatusStripのLayoutStyleプロパティがデフォルトでTableのため、これらのプロパティも変更する必要があります。

VB.NET
コードを隠すコードを選択
'メニューのオーバーフロー機能を可能にする
Me.menuStrip1.CanOverflow = True
'メニューの最上位項目のOverflowをAsNeededにする
For Each item As ToolStripItem In Me.menuStrip1.Items
    item.Overflow = ToolStripItemOverflow.AsNeeded
Next

'ステータスバーのオーバーフロー機能を可能にする
Me.statusStrip1.CanOverflow = True
'LayoutStyleをHorizontalStackWithOverflowにする
Me.statusStrip1.LayoutStyle = ToolStripLayoutStyle.HorizontalStackWithOverflow
C#
コードを隠すコードを選択
//メニューのオーバーフロー機能を可能にする
this.menuStrip1.CanOverflow = true;
//メニューの最上位項目のOverflowをAsNeededにする
foreach (ToolStripItem item in this.menuStrip1.Items)
{
    item.Overflow = ToolStripItemOverflow.AsNeeded;
}

//ステータスバーのオーバーフロー機能を可能にする
this.statusStrip1.CanOverflow = true;
//LayoutStyleをHorizontalStackWithOverflowにする
this.statusStrip1.LayoutStyle =
    ToolStripLayoutStyle.HorizontalStackWithOverflow;
補足:MSDNではToolStrip.CanOverflowプロパティの説明を、「ToolStrip 内の項目をオーバーフロー メニューに送信できるかどうかを示す値を取得または設定します。」としています。「オーバーフローメニューに送信」という意味が、オーバーフローメニューに移動するということであれば、この説明が正しいのか、疑問です。CanOverflowプロパティがFalseの時、OverflowプロパティがAlwaysのToolStripItemはToolStripに全く表示されません(ToolStrip.LayoutStyleプロパティがTableまたはFlowの時は、表示されます)。これは多分、OverflowがAlwaysのToolStripItemがオーバーフローメニューに移動したが、オーバーフローボタンが表示されなくなったため見えなくなったものと考えられます。つまり、CanOverflowプロパティはオーバーフローボタンを表示するかどうかを指定するものと解釈した方が良さそうです。(説明が正しく、動作が間違っている可能性もありますが。)
  • 履歴:
  • 2014/9/15 MenuStripとStatusStripの説明を追加。

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

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