通常メニューバーに表示されている項目(メインメニューのトップレベルの項目)は、横に並んで1行で表示されます。ウィンドウのサイズを小さくして、メニュー項目がすべて収まらなくなったとしても、折り返されません。ここでは、メニューバーに表示しきれない項目があると折り返して(複数行で)表示されるようにする方法を紹介します。また、表示しきれない項目をオーバーフローボタン(一番右端に表示される「>」や「v」のようなボタン)に入れる方法も紹介します。
なおここで紹介する方法はMenuStripコントロールを使用したものですので、.NET Framework 2.0以降でしか使えません。
MenuStripコントロールのLayoutStyleプロパティは、デフォルトでHorizontalStackWithOverflowです。この状態では、メニュー項目は横に並べて表示され、たとえ表示されない項目があったとしても折り返されることはありません。
MenuStripコントロールのLayoutStyleプロパティをFlowにすると、表示しきれない項目が折り返して表示されるようになります。
表示しきれない項目をオーバーフローボタンに入れるには、まずMenuStripコントロールのLayoutStyleプロパティをHorizontalStackWithOverflowにします。そして、CanOverflowプロパティをTrueにします。MenuStrip.CanOverflowプロパティはフォームデザイナで変更することができませんので、フォームのLoadイベントハンドラなどに自分でコードを書くことによってTrueにします。
'フォームのLoadイベントハンドラ Private Sub Form1_Load(sender As Object, e As EventArgs) _ Handles MyBase.Load 'MenuStrip1のオーバーフロー機能を有効にする MenuStrip1.CanOverflow = True End Sub
//フォームの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にします。