Используйте событие DataGridView MouseDown
, чтобы проверить, была ли нажата правая мышь, и, если это так, используйте связанное свойство HitTestInfo
, чтобы определить, была ли нажата ячейка, строка или столбец.Используйте эту информацию для отображения необходимой вам ContextMenuStrip.
Вот пример MouseDown
события, которое делает это.Чтобы попробовать пример, перетащите DataGridView и три ContentMenuStrips на форму.Назовите ContentMenuStrips mnuCell, mnuRow и mnuColumn.
Private Sub DataGridView1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseDown
If e.Button = Windows.Forms.MouseButtons.Right Then
Dim ht As DataGridView.HitTestInfo
ht = Me.DataGridView1.HitTest(e.X, e.Y)
If ht.Type = DataGridViewHitTestType.Cell Then
DataGridView1.ContextMenuStrip = mnuCell
mnuCell.Items(0).Text = String.Format("This is the cell at {0}, {1}", ht.ColumnIndex, ht.RowIndex)
ElseIf ht.Type = DataGridViewHitTestType.RowHeader Then
DataGridView1.ContextMenuStrip = mnuRow
mnuRow.Items(0).Text = "This is row " + ht.RowIndex.ToString()
ElseIf ht.Type = DataGridViewHitTestType.ColumnHeader Then
DataGridView1.ContextMenuStrip = mnuColumn
mnuColumn.Items(0).Text = "This is col " + ht.ColumnIndex.ToString()
End If
End If
End Sub
Здесь я назначаю свойство ContextMenuStrip объекта DataGridView для ContextMenuStrip, подходящего для элемента, щелкаемого правой кнопкой мыши (ячейка, строка или столбец).Чтобы продемонстрировать, как вы можете дополнительно настроить поведение ContextMenuStrips, я также устанавливаю текст в каждом пункте меню ContentMenuStrips.