.Net Framework(mono)でアプリケーションを作っていて、メニューを組み込み、メニューから呼び出される機能を実装していました。キーボードのショートカットキーでも、その機能を呼び出せると便利かと思いKeyDownイベント
で押されたキーを調べて機能を呼び出すコードを書いていました。
調べたところメニューにショートカットキーを割り当てる機能があるので、態々イベント処理でキーを判定するルーチンを記述する必要が無いことを知りました。確認のためサンプルプログラムを書いていました。
ソース
using System;
using System.Windows.Forms;
/*
コンパイル
mcs Form1.cs -r:System.Windows.Forms.dll -r:System.Drawing.dll -out:SampleMenu.exe
実行
mono SampleMenu.exe
*/
namespace SampleMenu
{
class Form1 : Form
{
public Form1()
{
// フォームサイズ
this.Size = new System.Drawing.Size(800, 450);
// メニューの初期化
var menubar = new MenuStrip{ Height = 48, };
var menuFile = new ToolStripMenuItem { Text = "ファイル(&F)", };
menubar.Items.Add(menuFile);
var menuEdit = new ToolStripMenuItem { Text = " 編集 (&E)", };
menubar.Items.Add(menuEdit);
var menuHelp = new ToolStripMenuItem { Text = "ヘルプ(&H)", };
menubar.Items.Add(menuHelp);
this.Controls.Add(menubar);
var menuNew = new ToolStripMenuItem { Text = "新規作成", };
menuNew.ShortcutKeys = Keys.Control | Keys.N;
menuNew.ShowShortcutKeys = true;
menuNew.Click += (sender, e) => MessageBox.Show(((ToolStripMenuItem)sender).Text);
menuFile.DropDownItems.Add(menuNew);
var menuOpen = new ToolStripMenuItem { Text = "開く", };
menuOpen.ShortcutKeys = Keys.Control | Keys.O;
menuOpen.ShowShortcutKeys = true;
menuOpen.Click += (sender, e) => MessageBox.Show(((ToolStripMenuItem)sender).Text);
menuFile.DropDownItems.Add(menuOpen);
var menuSave = new ToolStripMenuItem { Text = "保存", };
menuSave.ShortcutKeys = Keys.Control | Keys.S;
menuSave.ShowShortcutKeys = true;
menuSave.Click += (sender, e) => MessageBox.Show(((ToolStripMenuItem)sender).Text);
menuFile.DropDownItems.Add(menuSave);
var menuSaveAs = new ToolStripMenuItem { Text = "名前をつけて保存", };
menuSaveAs.ShortcutKeys = Keys.Control | Keys.Shift | Keys.S;
menuSaveAs.ShowShortcutKeys = true;
menuSaveAs.Click += (sender, e) => MessageBox.Show(((ToolStripMenuItem)sender).Text);
menuFile.DropDownItems.Add(menuSaveAs);
var menuClose = new ToolStripMenuItem { Text = "終了", };
menuClose.ShortcutKeys = Keys.Control | Keys.Q;
menuClose.ShowShortcutKeys = true;
menuClose.Click += (sender, e) => MessageBox.Show(((ToolStripMenuItem)sender).Text);
menuFile.DropDownItems.Add(menuClose);
var menuSearchFor = new ToolStripMenuItem { Text = "検索する" };
menuSearchFor.ShortcutKeys = Keys.Control | Keys.F;
menuSearchFor.ShowShortcutKeys = true;
menuSearchFor.Click += (sender, e) => MessageBox.Show(((ToolStripMenuItem)sender).Text);
menuEdit.DropDownItems.Add(menuSearchFor);
}
// エントリーポイント
[STAThread]
static void Main() => Application.Run(new Form1());
}//class
}//ns
Mono環境でコンパイル
mcs Form1.cs -r:System.Windows.Forms.dll -r:System.Drawing.dll -out:SampleMenu.exe
Windows11で実行
.\SampleMenu.exe
「メニュー」→「ファイル(F)」をクリックすると各メニュー項目の右側にショートカットキーが表示されている。
メニュー項目をクリックするかショートカットキーを押すと、項目名がメッセージボックスに表示される。
サンプルは以上です。
今回はUbuntu上のMono環境でコンパイルし、出来上がった実行ファイル(.exe)をWindows11で実行しています。Ubntuで.exeファイルが実行できるのも変な感じですが、その.exeファイルがWindows11で実行できたことは、さらに変な感じがしました。
コメント