Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

Вызов меню по нажатию на правую кнопку в WinForms

#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 остаются без изменений.

Комментариев нет:

Отправить комментарий