#c_sharp #net #winforms
Есть некоторый DataGridView. Нужно при нажатии на правую кнопку отобразить контекстное меню с действиями над этой ячейкой. Подскажите, как это делается?
Ответы
Ответ 1
Присоединяем контекстное меню к DataGridView. Подписываемся на событие ContextMenuStrip.Opening: private void ContextMenuStrip_Opening(object sender, CancelEventArgs e) { var point = dataGridView.PointToClient(contextMenuStrip.Bounds.Location); var info = dataGridView.HitTest(point.X, point.Y); // Отменяем показ контекстного меню, если клик был не на ячейке if (info.RowIndex == -1 || info.ColumnIndex == -1) { e.Cancel = true; } } В обработчике клика нужных пунктов контекстного меню, относящихся к ячейкам, пишем: private void ToolStripItem_Click(object sender, System.EventArgs e) { var point = dataGridView.PointToClient(contextMenuStrip.Bounds.Location); var info = dataGridView.HitTest(point.X, point.Y); // Работаем с ячейкой var value = dataGridView[info.ColumnIndex, info.RowIndex].Value; } Другой вариант. Показываем контекстное меню вручную, когда оно необходимо. Для этого подписываемся на событие DataGridView.CellContextMenuStripNeeded: private void DataGridView_CellContextMenuStripNeeded(object sender, DataGridViewCellContextMenuStripNeededEventArgs e) { if (e.ColumnIndex != -1 && e.RowIndex != -1) { contextMenuStrip.Show(Cursor.Position); } } При этом не нужно подсоединять меню к самому DataGridView. И удаляем обработку события ContextMenuStrip.Opening. Обработчики событий ToolStripItem.Click остаются без изменений.
Комментариев нет:
Отправить комментарий