Code Snippet
Private Sub ContextMenuStrip1_Opening _
(ByVal sender As Object, _
ByVal e As System.ComponentModel.CancelEventArgs) _
Handles ContextMenuStrip1.Opening
Dim cms As ContextMenuStrip = sender
Dim targetScreen As Screen = Screen.FromControl(cms)
Dim dgvBounds As Rectangle = Me.DataGridView1.Bounds
Dim extremeDGVPoint As New Point _
(PointToScreen(New Point(dgvBounds.Right, dgvBounds.Bottom)))
Dim dgvScreen As Screen = Screen.FromPoint(extremeDGVPoint)
If Not targetScreen.Equals(dgvScreen) Then
If extremeDGVPoint.X < cms.Bounds.X Then
'targetScreen is to the right of dgvScreen
cms.Show(
New Point(cms.Bounds.X - cms.Width, cms.Bounds.Y))
ElseIf extremeDGVPoint.Y > cms.Bounds.Y Then
'targetScreen is below dgvScreen
cms.Show(
New Point(cms.Bounds.X, cms.Bounds.Y - cms.Height))
End If
End If
End Sub