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

メニューバーに表示しきれない項目を折り返しやオーバーフローで表示する

通常メニューバーに表示されている項目(メインメニューのトップレベルの項目)は、横に並んで1行で表示されます。ウィンドウのサイズを小さくして、メニュー項目がすべて収まらなくなったとしても、折り返されません。ここでは、メニューバーに表示しきれない項目があると折り返して(複数行で)表示されるようにする方法を紹介します。また、表示しきれない項目をオーバーフローボタン(一番右端に表示される「>」や「v」のようなボタン)に入れる方法も紹介します。

なおここで紹介する方法はMenuStripコントロールを使用したものですので、.NET Framework 2.0以降でしか使えません。

デフォルト状態のメニューバー

表示しきれない項目が折り返して表示されるようにする

MenuStripコントロールのLayoutStyleプロパティは、デフォルトでHorizontalStackWithOverflowです。この状態では、メニュー項目は横に並べて表示され、たとえ表示されない項目があったとしても折り返されることはありません。

表示されない項目があるメニューバー

MenuStripコントロールのLayoutStyleプロパティをFlowにすると、表示しきれない項目が折り返して表示されるようになります。

折り返された項目があるメニューバー

表示しきれない項目をオーバーフローボタンに入れる

表示しきれない項目をオーバーフローボタンに入れるには、まずMenuStripコントロールのLayoutStyleプロパティをHorizontalStackWithOverflowにします。そして、CanOverflowプロパティをTrueにします。MenuStrip.CanOverflowプロパティはフォームデザイナで変更することができませんので、フォームのLoadイベントハンドラなどに自分でコードを書くことによってTrueにします。

VB.NET
コードを隠すコードを選択
'フォームのLoadイベントハンドラ
Private Sub Form1_Load(sender As Object, e As EventArgs) _
        Handles MyBase.Load
    'MenuStrip1のオーバーフロー機能を有効にする
    MenuStrip1.CanOverflow = True
End Sub
C#
コードを隠すコードを選択
//フォームのLoadイベントハンドラ
private void Form1_Load(object sender, EventArgs e)
{
    //menuStrip1のオーバーフロー機能を有効にする
    menuStrip1.CanOverflow = true;
}

次に、オーバーフローボタンに入れたいメニュー項目のToolStripMenuItem.OverflowプロパティをAsNeededにします。通常すべてのトップレベル項目でOverflowプロパティをAsNeededにすることになるでしょう。

これで表示しきれない項目がオーバーフローボタンに表示されるようになります。

オーバーフロー状態の項目があるメニューバー

メニューバーが縦長の場合

MenuStripコントロールを上ではなく、左か右に設置した場合(つまり、MenuStripコントロールのDockプロパティがLeftかRightの場合)、デフォルトでは、メニューバーは縦に並べられて表示されます。この時、MenuStripコントロールのLayoutStyleプロパティはVerticalStackWithOverflowになります。

デフォルト状態の縦のメニューバー

この時も先ほどと同じで、フォームのサイズを小さくして項目が表示しきれなくなったとしても、折り返して表示されることはありません。

表示されない項目がある縦のメニューバー

この時は、MenuStripコントロールのLayoutStyleプロパティをTableにしても折り返して表示されるようにはなりません。LayoutStyleプロパティをTableにすると、項目が左に寄せて表示されるようになるだけです(VerticalStackWithOverflowでは、中央に表示されます)。

項目を左に寄せて表示した縦のメニューバー

オーバーフローボタンは、先ほどと同じ方法で表示できます。つまり、MenuStripコントロールのLayoutStyleプロパティをVerticalStackWithOverflow、CanOverflowプロパティをTrueにして、メニュー項目のToolStripMenuItem.OverflowプロパティをAsNeededにします。

オーバーフロー状態の項目がある縦のメニューバー

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

  • イベントハンドラの意味が分からない、C#のコードをそのまま書いても動かないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。