【C#】データグリッドビュー上で右クリックしたときに位置に応じてコンテキストメニューの中身を変更したい

公開日: : 最終更新日:2014/08/14 .NET

スポンサーリンク

DataGridView上でクリックした位置によってコンテキストメニューの内容を変えたいと思ったのですが、あまりうまくいきませんでした。

色々試した結果、データグリッドビュー側のCellMouseClickなどのクリックイベントはコンテキストメニューのイベントがある状態だと右クリックしても呼ばれないことがわかりました。つまりコンテキストメニューの表示しか呼ばれないということです。

そこで、コンテキストメニューを関連付けずにCellMouseClickから表示を行うことにしました。

private void dataGridView1_CellMouseClick
(object sender, DataGridViewCellMouseEventArgs e)
{
	//右クリックのときのみ
	if (e.Button == MouseButtons.Right)
	{
		int idx = dataGridView1.CurrentCell.RowIndex;
		int rowindex= e.RowIndex;
		//クリック位置に応じた文字を取得して変更する
		string tmp =
			(string)this.dataGridView1.Rows[rowindex].Cells[0].Value;
		this.contextMenuStrip1.Items[1].Text = tmp;
		//コンテキストメニューを表示する
		this.contextMenuStrip1.Show();
		//マウスカーソルの位置を画面座標で取得
		Point p = Control.MousePosition;
		this.contextMenuStrip1.Top = p.Y;
		this.contextMenuStrip1.Left = p.X;
	}
}

このCellMouseClickイベントではどの行にカーソルがあるのかを取得して、その内容によって中身を変えています。そして、コンテキストメニューのItemsメンバで表示テキストを変更しています。

後は表示するだけなので、Showメソッドを呼べばいいのですが、ただ呼ぶだけでは表示される位置が画面の左上になってしまいとてもおかしくなってしまいます。

そこで、TopとLeftをクリック位置で移動させればいいです。ちなみに、Showの前で移動させてもShowで一度原点に戻ってしまうようです。

スポンサーリンク
Amazon
  • このエントリーをはてなブックマークに追加

関連記事

【C#】WebBrowserでリンクをクリックしたときにIEなどの他のブラウザが立ち上がるのを防ぐ

C#でWebBrowserでブラウザ機能などを作って、リンクを踏んだ時に他の標準のブラウザが開いてし

記事を読む

no image

【C# .NET】エラー CS0051: アクセシビリティに一貫性がありません。

クラスなどの宣言時にpublicなどが付いていないために起こっているみたいです。 アクセス制限

記事を読む

【C#(.NET)】画像などのファイルをダウンロードして保存する

WebClientクラスを使ってファイルをダウンロードする System.Net空間にあるWebC

記事を読む

コンソールアプリケーションでC++/CLIの関数を使う

今時(?)なかなか使っている人がいるかどうかわかりませんが、VisualStudio(2008)で「

記事を読む

【.NET】BitmapのGetPixelで画素値が取得できない??

C++/CLI、C#、VBなどで用いられるBitmapを使っていたところGetPixelで画素値を取

記事を読む

【C++/CLI】フォームアプリケーションでコンソール画面を出現させる

プロジェクトのプロパティを開いて「構成プロパティ」→「リンカ」→「システム」の「サブシステム」を「コ

記事を読む

【C# .NET】DataGridViewのコンボボックスの中身を動的に変更・追加する

データグリッドビューのコンボボックスの中身を変えるときの一番簡単な方法です。おそらく通常だとデータ配

記事を読む

フォームアプリケーションで使えそうなアイコン

VisualStudioなどでフォームアプリケーションを作成するときに役に立ちそうなアイコン素材の情

記事を読む

【DeepLearning】物体検出手法のSSD(Keras版)を試す (Ubuntu14.04)

はやりのディープラーニングの物体検出手法の一つであるSSDのサンプルを

【Laravel5】既存のDBからデータを取得して表示する

はじめに 今まで作ったWebサイトをLaravel5で見れるようにし

【C++/OpenCV】cv::Matの画像にインパルスノイズを付加する

OpenCVで画像にノイズを付け足したいと思って調べたところ、Pyth

Intel Corei7-7700TでHTC Viveの動作確認

はじめに HTC ViveというVRヘッドセットで遊んでみたのでその

【Python】フォルダ内のカッコ付き数字ファイルを一括でリネームするスクリプト

はじめに タイトルどおりなのですが、指定フォルダ内のファイルのファイ

OpenCV3.1のTracking APIでトラッキングを試す

はじめに 先日OpenCV3.1をopencv_contrib付きで

パソコンを複数台使う際便利なツール

はじめに 先日、機械学習用にGPUを積んだBTOパソコンを購入しまし

→もっと見る

  • Author : ががんぼ
    プログラミングやWeb関係で気付いたことについてメモしていく予定。だいたいが備忘録ですが、自分でサンプルを作って動かしてみたりしています。
PAGE TOP ↑