DataGridViewを拡張して、2番目のContextMenuを追加して、どの列をgirdで表示するかを選択したいと考えています。新しいContextMenuは、列のヘッダーを右クリックして表示されます。DataGridViewの列ヘッダーを右クリックすると、コンテキストメニューの位置を正しく設定できますか?
コンテキストメニューを表示するのに正しい水平位置が得られません。どうすれば修正できますか?
public partial class Form1 : Form
{
DataGridView dataGrid;
ContextMenuStrip contextMenuStrip;
public Form1()
{
InitializeComponent();
dataGrid = new DataGridView();
Controls.Add(dataGrid);
dataGrid.Dock = System.Windows.Forms.DockStyle.Fill;
dataGrid.ColumnHeaderMouseClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(ColumnHeaderMouseClick);
dataGrid.DataSource = new Dictionary<string, string>().ToList();
contextMenuStrip = new ContextMenuStrip();
contextMenuStrip.Items.Add("foo");
contextMenuStrip.Items.Add("bar");
}
private void ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
contextMenuStrip.Show(PointToScreen(e.Location));
}
}
}
コンテンツメニューは、画面の左上隅に表示されます.e.locationは列見出し内のマウスの位置です。私は今問題を解決しましたが、助けてくれてありがとう。 –
あなたの質問に答えたところ、e.locationはcolumnheaderではなくdatagrid内にあるため、competent_techは正しいです。 –
competent_techの回答がうまくいかなかったようですが、MouseDownイベントで使用された場合、彼は確かに正しいです。 –