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

関連記事

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

no image

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

【PHP】headerでContent-Typeを指定したのに効かない場合の対処法

PHPでサイトマップを作ろうと思い、XML形式のファイルを出力しようと

スマホ向け幅固定サイトの回転時の幅対応方法

幅固定サイトでのスマホ回転時Webサイトの横幅を合わせる方法のメモ。

【PHP】特定のURLからそのAtomやRSSのフィードを抽出する方法

特定のURLからRSSやATOMのフィードを抽出する方法をメモ。 流

フィード抽出ツール(RSS1.0、RSS2.0、atom)

任意URL サイト名 サイトURL RSS1.0

格安プラン限定レンタルサーバー機能比較表(2016年)

はじめに  最近新しい共用サーバーをレンタルしようと思い調査およびそ

kindle unlimitedが便利だったのでお勧めの使い方など感想メモ

 kindle unlimitedというサービスが8/3からAmazo

→もっと見る

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