C#
パターン3: ContextMenuStrip + DataGridView —右クリック編集メニュー
出典: WinForms メニュー3兄弟 — MenuStrip / ToolStrip / ContextMenuStrip の使い分けと DataGridView 連携 — パターン3: ContextMenuStrip + DataGridView —右クリック編集メニュー
public partial class MasterForm : Form
{
public MasterForm()
{
InitializeComponent();
//デザイナでContextMenuStrip (rowContextMenu)を追加し、
// Itemsに「編集」「削除」を登録しておく
// DataGridViewにContextMenuStripを紐付け
masterGridView.ContextMenuStrip = rowContextMenu;
//右クリックされた行を検出するためのイベント
masterGridView.CellMouseDown += MasterGridView_CellMouseDown;
//「編集」メニューのClickイベント
editToolStripMenuItem.Click += (sender, e)=>
{
EditCurrentRow();
};
//「削除」メニューのClickイベント
deleteToolStripMenuItem.Click += (sender, e)=>
{
DeleteCurrentRow();
};
}
private void MasterGridView_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
//右クリックの時のみ処理
if (e.Button != MouseButtons.Right)return;
if (e.RowIndex < 0)return; //ヘッダ行は対象外
//右クリックした行をカレント行に切り替え
masterGridView.CurrentCell = masterGridView.Rows[e.RowIndex].Cells[0];
}
private void EditCurrentRow()
{
if (masterGridView.CurrentRow == null)return;
var id = (int)masterGridView.CurrentRow.Cells["id"].Value;
//編集画面を開く
}
private void DeleteCurrentRow()
{
if (masterGridView.CurrentRow == null)return;
var id = (int)masterGridView.CurrentRow.Cells["id"].Value;
//削除確認→削除実行
}
}
▸ この snippet は実行結果未収録
▸ 実行結果は未収録です
Source収録記事
この snippet は記事の「パターン3: ContextMenuStrip + DataGridView —右クリック編集メニュー」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。
同じ記事から
5 件//デザイナでMenuStripを追加し、Itemsに「ファイル」「編集」「ヘルプ」を登録 //「ファイル」配下に「開く」「保存」「終了」サブメニュー public partial class MainForm : Form未収録
パターン1: MenuStrip —フォーム上部のメインメニュー
#a77c3de514d9
public partial class MainForm : Form { public MainForm() {未収録
パターン2: ToolStrip —アイコン付きツールバー
#0cc7fa434216
private void rowContextMenu_Opening(object sender, CancelEventArgs e) { //メニュー全体をキャンセル(表示しない) if (masterGridView.CurrentRow == null)未収録
パターン4: ContextMenuStrip.Opening —動的な表示制御
#00a271c9dc03
// ❌ NG:同一コントロールにContextMenuとContextMenuStrip両方設定 // myControl.ContextMenu = oldMenu; //旧式 // myControl.ContextMenuStrip = newStrip; //新式 // →動作は新式(ContextMenuStrip)が優先されるが、旧式のItemsは無視される未収録
ハマりポイント整理—旧式と新式の混在トラブル
#965b4140b789
//安全な切り替え myControl.ContextMenu = null; myControl.ContextMenuStrip = newStrip;未収録
ハマりポイント整理—旧式と新式の混在トラブル
#68f767bcd3df
