C# – DatagridView和ContextMenu

我有一个datagridview,我在其中显示有关产品的信息。 我想在用户选择一个单元格然后右键单击该单元格时绑定一个上下文菜单。 我有另一个contextmenu,并且一个绑定到datagridview的列。 如果用户右键单击上下文菜单显示的列。

我试过这样但是它不起作用。 上下文菜单显示用户右键单击单元格的时间,但绑定到列标题的上下文菜单不起作用。

private void GridView1_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e) { if (e.Button == MouseButtons.Right) { productContextMenu.Show(GridView1, e.Location); } } 

如何使用当用户右键单击datagridview时显示?

很多人提前。

编辑

Thnx的答案。 我解决了这个问题:

  private void GridView1_MouseUp(object sender, MouseEventArgs e) { DataGridView.HitTestInfo hitTestInfo; if (e.Button == MouseButtons.Right) { hitTestInfo = GridView1.HitTest(eX, eY); if (hitTestInfo.Type == DataGridViewHitTestType.Cell) { productContextMenu.Show(GridView1, e.Location); } } } 

上下文都显示了。 当我单击上下文菜单显示的列时,以及单击上下文菜单显示的单元格时。

试试这个

  private void dataGridView1_CellMouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) { contextMenu.Show(datagridview, e.Location); } } 

要么

  private void dataGridView_MouseUp(object sender, MouseEventArgs e) { // Load context menu on right mouse click DataGridView.HitTestInfo hitTestInfo; if (e.Button == MouseButtons.Right) { hitTestInfo = dataGridView.HitTest(eX, eY); // If column is first column if (hitTestInfo.Type == DataGridViewHitTestType.Cell && hitTestInfo.ColumnIndex == 0) contextMenuForColumn1.Show(dataGridView, new Point(eX, eY)); // If column is second column if (hitTestInfo.Type == DataGridViewHitTestType.Cell && hitTestInfo.ColumnIndex == 1) contextMenuForColumn2.Show(dataGridView, new Point(eX, eY)); } } 

对于相对位置的问题,您也可以使用此方法:

 DataGridViewColumn dgvC = new DataGridViewColumn(); DataGridViewRow dgvR = new DataGridViewRow(); dgvC = dgv.Columns[e.ColumnIndex]; dgvR = dgv.Rows[e.RowIndex]; Point p = new Point(); pX = (dgvC.Width * e.ColumnIndex) + eX; pY = (dgvR.Height * e.RowIndex) + eY; dgv.ContextMenu.Show(dgv, p);