当我右键单击 datgridview 中的一行时,我正在尝试创建一个显示上下文菜单的事件。

这是正在发生的问题的图像:

这是我目前使用的代码:

Private Sub dgvStudents_CellMouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles dgvStudents.CellMouseDown
    Dim rowClicked As DataGridView.HitTestInfo = dgvStudents.HitTest(e.X, e.Y)
    'Select Right Clicked Row if its not the header row
    If e.Button = Windows.Forms.MouseButtons.Right AndAlso e.RowIndex > -1 Then
        'Clear any currently sellected rows
        dgvStudents.ClearSelection()
        Me.dgvStudents.Rows(e.RowIndex).Selected = True
        ContextMenuStrip1.Show(dgvStudents, Control.MousePosition)

    End If
End Sub

P.S 屏幕截图没有显示我的光标 >.> 但它绝对没有与上下文菜单同步!

编辑 :好的,我已经解决了,

我只是将 Control.MousePosition 替换为 MousePosition 并且它起作用了!

最佳答案

Mouse.Position 在屏幕坐标中。您需要提供相对坐标,相对于 dgvStudents。它们通过事件参数在银盘上交给你:

  ContextMenuStrip1.Show(dgvStudents, e.Location)

上下文菜单通常是在响应鼠标抬起时显示的,因此请改为使用 CellMouseUp 事件。

关于vb.net - ContextMenuStrip 未显示附近的光标,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15313734/

10-12 00:13