【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
  • このエントリーをはてなブックマークに追加

関連記事

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

no image

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

NVIDIA DIGITSをSupervisorを使って自動起動する

はじめに 先日Ubuntu14.04にDIGITS 5をGPUなしP

【2017年度】GeForce 1080 Ti搭載BTOパソコン比較

はじめに 最近ディープラーニング用にGPUのないPCにDIGITSを

Windows用のシンプルなストップウォッチソフト紹介

Windows(10)でも使える使いやすいKAZAMITimerという

MNISTをDIGITS 5のCPUのみで試す(GPUなし)

はじめに DIGITSを使えばGUI操作で簡単にディープラーニングが

Windowsユーザが初めてMacBookを購入したときの注意点や感想

最近12インチのMacBookを購入しました。今までWindowsしか

Redmine3.2をUbuntu14.04にインストールして躓いた所についてメモ

はじめに Ubuntu14.04 ServerにRedmine3.2

UWSCを使ったソフト自動立ち上げ【SoftEther VPN Server】

やりたいこと 最近SoftEtherという筑波大学発のベンチャー企業

→もっと見る

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