プロが教える店舗&オフィスのセキュリティ対策術

DataGridViewのどのセルを右クリックしてポップアップメニュー(ContextMenuStrip) が表示されたか知りたいのですが

using System;
using System.Windows.Forms;

public class MyForm : Form
{
DataGridView dgv;
DataGridViewTextBoxColumn dgvColumn1;
FileDialog fileDlg;
ContextMenuStrip popup;
ToolStripMenuItem popupItem;

public MyForm()
{
dgv = new DataGridView();
dgvColumn1 = new DataGridViewTextBoxColumn();
fileDlg = new OpenFileDialog();
popup = new ContextMenuStrip();
popupItem = new ToolStripMenuItem();

dgvColumn1.HeaderText = "column1";
dgvColumn1.ContextMenuStrip = popup;

dgv.Dock = DockStyle.Fill;
dgv.RowTemplate.Height = 16;
dgv.Columns.Add(dgvColumn1);

popupItem.Text = "file";
popupItem.MouseUp += delegate(object sender, MouseEventArgs e)
{
if (fileDlg.ShowDialog() == DialogResult.OK)
{
//右クリックしたセル.Text = filedlg.FileName;
}
};

// popup menu
popup.Items.Add(popupItem);
Controls.Add(dgv);
}
}
上のソースにて、
http://dobon.net/vb/dotnet/control/cmsourcecontr …
にあるように、popup.SourceControlを用いても、DataGridView コントロールしか返って来ません。
となると、DataGridViewのCellMouseEventハンドラを実装する必要が出てくると思うのですがこれ以外解決方法ってないですかね・・?

A 回答 (1件)

ContextMenuStripの位置(Left,Top)からDataGridViewのHitTestで求められると思います。


フォームのクライアント領域のサイズや親コントロールと位置などを考慮して、正しい座標を計算する必要はありますが・・・
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!