C#
パターン4: ContextMenuStrip.Opening —動的な表示制御
出典: WinForms メニュー3兄弟 — MenuStrip / ToolStrip / ContextMenuStrip の使い分けと DataGridView 連携 — パターン4: ContextMenuStrip.Opening —動的な表示制御
private void rowContextMenu_Opening(object sender, CancelEventArgs e)
{
//メニュー全体をキャンセル(表示しない)
if (masterGridView.CurrentRow == null)
{
e.Cancel = true; //メニュー表示自体を抑制
return;
}
//個別アイテムの表示制御
var currentUserCanEdit = CheckEditPermission();
var currentUserCanDelete = CheckDeletePermission();
editToolStripMenuItem.Visible = currentUserCanEdit;
deleteToolStripMenuItem.Visible = currentUserCanDelete;
//ステータスによる表示制御
var status = (string)masterGridView.CurrentRow.Cells["status"].Value;
deleteToolStripMenuItem.Enabled = (status != "確定済"); //確定済は削除不可
}
private bool CheckEditPermission(){ return true; /* 実際は権限チェック */ }
private bool CheckDeletePermission(){ return false; /* 実際は権限チェック */ }
▸ この snippet は実行結果未収録
▸ 実行結果は未収録です
Source収録記事
この snippet は記事の「パターン4: ContextMenuStrip.Opening —動的な表示制御」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。
同じ記事から
5 件//デザイナでMenuStripを追加し、Itemsに「ファイル」「編集」「ヘルプ」を登録 //「ファイル」配下に「開く」「保存」「終了」サブメニュー public partial class MainForm : Form未収録
パターン1: MenuStrip —フォーム上部のメインメニュー
#a77c3de514d9
public partial class MainForm : Form { public MainForm() {未収録
パターン2: ToolStrip —アイコン付きツールバー
#0cc7fa434216
public partial class MasterForm : Form { public MasterForm() {未収録
パターン3: ContextMenuStrip + DataGridView —右クリック編集メニュー
#a8ee6da07168
// ❌ NG:同一コントロールにContextMenuとContextMenuStrip両方設定 // myControl.ContextMenu = oldMenu; //旧式 // myControl.ContextMenuStrip = newStrip; //新式 // →動作は新式(ContextMenuStrip)が優先されるが、旧式のItemsは無視される未収録
ハマりポイント整理—旧式と新式の混在トラブル
#965b4140b789
//安全な切り替え myControl.ContextMenu = null; myControl.ContextMenuStrip = newStrip;未収録
ハマりポイント整理—旧式と新式の混在トラブル
#68f767bcd3df
