目次: C# - Windows Formsでよく使うコントロールたち (Visual Studioなし環境向け) - Qiita
まえがき
MenuStrip
を使うサンプルソースはサクッと見つかったけど、重なり防止の部分のケアが欲しかったので、メモ代わりに置いておきます。
画面キャプチャ
ソースコード
using System;
using System.Drawing;
using System.Windows.Forms;
class MenuStripSample:Form
{
MenuStripSample()
{
ClientSize = new Size(500, 300);
var menuStrip = new MenuStrip();
SuspendLayout();
menuStrip.SuspendLayout();
var menuItemFile = new ToolStripMenuItem(){ Text = "ファイル(&F)"};
var menuItemFileExport = new ToolStripMenuItem(){ Text = "エクスポート"};
var menuItemEdit = new ToolStripMenuItem(){ Text = "編集(&E)"};
menuStrip.Items.Add(menuItemFile);
menuStrip.Items.Add(menuItemEdit);
menuItemFile.DropDownItems.Add( new ToolStripMenuItem("開く(&O)...", null, (s,e)=>{MessageBox.Show("ひらく!");}, Keys.Control | Keys.O) );
menuItemFile.DropDownItems.Add( new ToolStripSeparator() );
menuItemFile.DropDownItems.Add( new ToolStripMenuItem("保存(&S)", null, (s,e)=>{MessageBox.Show("ほぞん!");}, Keys.Control | Keys.S) );
menuItemFile.DropDownItems.Add( new ToolStripSeparator() );
menuItemFile.DropDownItems.Add( menuItemFileExport );
menuItemFileExport.DropDownItems.Add(new ToolStripMenuItem("bmpファイルとしてエクスポート", null, (s,e)=>{MessageBox.Show("えくすぽーと その1");}, null) );
menuItemFileExport.DropDownItems.Add(new ToolStripMenuItem("pngファイルとしてエクスポート", null, (s,e)=>{MessageBox.Show("えくすぽーと その2");}, null) );
menuItemEdit.DropDownItems.Add( new ToolStripMenuItem("ほげほげ", null, (s,e)=>{MessageBox.Show("ほげ");}, null) );
menuItemEdit.DropDownItems.Add( new ToolStripMenuItem("Foo Bar", null, (s,e)=>{MessageBox.Show("Foo");}, null) );
///////
// メニュー以外を作成しているコード部分
var panel = new Panel(){Dock = DockStyle.Fill};
Controls.Add(panel);
var btn1 = new Button(){Location = new Point(0,0), Size = new Size(100,30), Text = "ボタン1"};
var btn2 = new Button(){Dock = DockStyle.Bottom, Height = 30, Text = "ボタン2"};
btn1.Click += (s,e)=>{MessageBox.Show("ボタン1が押されました");};
btn2.Click += (s,e)=>{MessageBox.Show("ボタン2が押されました");};
panel.Controls.Add(btn1);
panel.Controls.Add(btn2);
//
///////
Controls.Add(menuStrip); // 注意:panel より先に登録してしまうと、panelとmenuStripが重なって表示されてしまう。
MainMenuStrip = menuStrip;
menuStrip.ResumeLayout(false);
menuStrip.PerformLayout();
ResumeLayout(false);
PerformLayout();
}
[STAThread]
static void Main()
{
Application.Run(new MenuStripSample());
}
}
参考サイト
- フォームにメインメニューを付ける - .NET Tips (VB.NET,C#...)
- コントロールのレイアウトを一時中断して、パフォーマンスを向上させる /「ResumeLayout()」と「ResumeLayout(false) + PerformLayout」の違い - .NET Tips (VB.NET,C#...)
- ToolStripMenuItem Constructor (System.Windows.Forms) | Microsoft Docs
- ToolStrip/StatusStripコントロールがほかのコントロールに重なるのを解消するには?[C#、VB、VS 2005、VS 2008] - @IT