ここでは C# でコンテキストメニュー ( contextMenuStrip ) にメニュー項目を動的に追加するサンプルコードを掲載しています。
スポンサーリンク
動的に追加するコンテキストメニュー
ここでは、以下のコンテキストメニューを作成しています。画像からも分かるように notifyIcon にコンテキストメニューを追加しています。
第1階層の項目:グープ
第2階層の項目:メニュー項目1、メニュー項目2
となっています。また、それぞれのメニュー項目をクリックしたときのイベントを捕捉できなければ利用価値が大幅に下がりますので、クリックイベントも動的に追加しています。なお、フォーム上に contextMenuStrip コンポーネントは配置してある状態です。
詳細はサンプルコード内のコメントを参照ください。
コンテキストメニューの動的追加:サンプルソースコード
C#
private void TestForm_Load(object sender, EventArgs e) { // コンテキストメニューをクリア this.contextMenuStrip.Items.Clear(); // 第1階層のメニュー ToolStripMenuItem tsi1 = new ToolStripMenuItem(); tsi1.Text = "グループ"; tsi1.ToolTipText = "グループのツールチップ"; // 第2階層のメニュー ToolStripMenuItem tsi2 = new ToolStripMenuItem(); tsi2.Text = "メニュー項目1"; tsi2.ToolTipText = "メニュー項目1のツールチップ"; // クリックイベントを追加する // フォームで設定した ItemClicked イベントは第1階層の項目のみ発生する tsi2.Click += contextMenuStrip_SubMenuClick; // 第1階層のメニューの最後尾に追加 tsi1.DropDownItems.Add(tsi2); ToolStripMenuItem tsi3 = new ToolStripMenuItem(); tsi3.Text = "メニュー項目2"; tsi3.ToolTipText = "メニュー項目2のツールチップ"; tsi3.Click += contextMenuStrip_SubMenuClick; // 第1階層のメニューの最後尾に追加する tsi1.DropDownItems.Add(tsi3); // コンテキストメニューに第1階層のメニューを追加する this.contextMenuStrip.Items.Add(tsi1); } // 第1階層のメニュー項目がクリックされた場合 private void contextMenuStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e) { // 第1階層のクリックイベントのみで発生する // 第2階層のクリックではこのイベントは発生しない } // 第2階層のメニュー項目のクリックイベント private void contextMenuStrip_SubMenuClick(object sender, EventArgs e) { // sender にはクリックされたメニューの ToolStripMenuItem が入ってきますので、 // 必要に応じて処理を行います ToolStripMenuItem mi = (ToolStripMenuItem)sender; }
VB.NET のサンプルは割愛します。ハイボールが私を呼んでいます。