WindowsFormsのDataGridViewにセルの情報を参照する右クリックメニュー設定

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がクリックされたセルインデックス
	// それらをもとにメニューを一部制限
	// メニュー内機能からセルを参照するためにプロパティなどに保管
}

以上です。

コメントを残す