C# - DatagridView и ContextMenu
у меня есть datagridview, где я показываю информацию о продуктах. Я хочу привязать contextmenu, когда пользователь выбирает ячейку, а затем щелкает правой кнопкой мыши по этой ячейке. У меня есть еще один contextmenu, и этот привязан к столбцам datagridview. Если пользователь щелкает правой кнопкой мыши по столбцу, отображается contextmenu.
Я пробовал так, но это не работает. Контекстное меню показывает, когда пользователь щелкает правой кнопкой мыши по ячейке, но contextmenu, привязанный к заголовку столбца, не работа.
private void GridView1_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
productContextMenu.Show(GridView1, e.Location);
}
}
Как сделать так, чтобы при щелчке правой кнопкой мыши на datagridview появляется?
многие thanx заранее.
редактировать
Thnx для ответов. Я решил проблему так:
private void GridView1_MouseUp(object sender, MouseEventArgs e)
{
DataGridView.HitTestInfo hitTestInfo;
if (e.Button == MouseButtons.Right)
{
hitTestInfo = GridView1.HitTest(e.X, e.Y);
if (hitTestInfo.Type == DataGridViewHitTestType.Cell)
{
productContextMenu.Show(GridView1, e.Location);
}
}
}
оба contextmenus показывает. Когда я нажимаю на столбец, который показывает контекстное меню, и когда я нажимаю на ячейку, которую показывает contextmenu.
2 ответов
попробуй такое
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(e.X, e.Y);
// If column is first column
if (hitTestInfo.Type == DataGridViewHitTestType.Cell && hitTestInfo.ColumnIndex == 0)
contextMenuForColumn1.Show(dataGridView, new Point(e.X, e.Y));
// If column is second column
if (hitTestInfo.Type == DataGridViewHitTestType.Cell && hitTestInfo.ColumnIndex == 1)
contextMenuForColumn2.Show(dataGridView, new Point(e.X, e.Y));
}
}
для Проблемы с относительным положением вы также можете использовать этот aproach:
DataGridViewColumn dgvC = new DataGridViewColumn();
DataGridViewRow dgvR = new DataGridViewRow();
dgvC = dgv.Columns[e.ColumnIndex];
dgvR = dgv.Rows[e.RowIndex];
Point p = new Point();
p.X = (dgvC.Width * e.ColumnIndex) + e.X;
p.Y = (dgvR.Height * e.RowIndex) + e.Y;
dgv.ContextMenu.Show(dgv, p);