WindowsFormsのDataGridViewに右クリックメニュー(ContextMenuStrip)を設定し、
クリックされたセルの情報を参照しメニュー制限・機能実行できるようにしました。
最初はセルマウスクリックのイベントを使って、
クリックされたセルのインデックスを保管し、メニューをShowで出せばいいかと思ったのですが、
メニュー表示する座標を上手く計算できませんでした。
そこでどうすべきか調べたところ、
メニューの表示は、素直にContextMenuStripプロパティにメニュー設定してコントロールに任せて、
セルの情報をもとにメニュー制限するなどは、
ContextMenuStripのOpeningイベントで行うのが良いとわかりました。
結果として、以下のようなコードでの実現となりました。
private void menu_Opening(object sender, CancelEventArgs e) {
// 画面座標
var posScreen = Cursor.Position;
// クライアント座標
var posClient = dgvGroupingPartsNumData.PointToClient(posScreen);
// クライアント座標をセル情報に変換
var info = dgvGroupingPartsNumData.HitTest(posClient.X, posClient.Y);
// info.RowIndex, info.ColumnIndexがクリックされたセルインデックス
// それらをもとにメニューを一部制限
// メニュー内機能からセルを参照するためにプロパティなどに保管
}
以上です。