MenuStripを使うサンプルソースはサクッと見つかったけど、重なり防止の部分のケアが欲しかったので、メモ代わりに置いておきます。
画面キャプチャ
ソースコード
usingSystem;usingSystem.Drawing;usingSystem.Windows.Forms;classMenuStripSample:Form{MenuStripSample(){ClientSize=newSize(500,300);varmenuStrip=newMenuStrip();SuspendLayout();menuStrip.SuspendLayout();varmenuItemFile=newToolStripMenuItem(){Text="ファイル(&F)"};varmenuItemFileExport=newToolStripMenuItem(){Text="エクスポート"};varmenuItemEdit=newToolStripMenuItem(){Text="編集(&E)"};menuStrip.Items.Add(menuItemFile);menuStrip.Items.Add(menuItemEdit);menuItemFile.DropDownItems.Add(newToolStripMenuItem("開く(&O)...",null,(s,e)=>{MessageBox.Show("ひらく!");},Keys.Control|Keys.O));menuItemFile.DropDownItems.Add(newToolStripSeparator());menuItemFile.DropDownItems.Add(newToolStripMenuItem("保存(&S)",null,(s,e)=>{MessageBox.Show("ほぞん!");},Keys.Control|Keys.S));menuItemFile.DropDownItems.Add(newToolStripSeparator());menuItemFile.DropDownItems.Add(menuItemFileExport);menuItemFileExport.DropDownItems.Add(newToolStripMenuItem("bmpファイルとしてエクスポート",null,(s,e)=>{MessageBox.Show("えくすぽーと その1");},null));menuItemFileExport.DropDownItems.Add(newToolStripMenuItem("pngファイルとしてエクスポート",null,(s,e)=>{MessageBox.Show("えくすぽーと その2");},null));menuItemEdit.DropDownItems.Add(newToolStripMenuItem("ほげほげ",null,(s,e)=>{MessageBox.Show("ほげ");},null));menuItemEdit.DropDownItems.Add(newToolStripMenuItem("Foo Bar",null,(s,e)=>{MessageBox.Show("Foo");},null));///////// メニュー以外を作成しているコード部分varpanel=newPanel(){Dock=DockStyle.Fill};Controls.Add(panel);varbtn1=newButton(){Location=newPoint(0,0),Size=newSize(100,30),Text="ボタン1"};varbtn2=newButton(){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]staticvoidMain(){Application.Run(newMenuStripSample());}}
参考サイト
- フォームにメインメニューを付ける - .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