3

当我右键单击 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

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

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

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

4

2 回答 2

6

这些都不适合我。使菜单在鼠标下弹出的解决方案是:

ContextMenuStrip1.Show(MousePosition.X, MousePosition.Y)
于 2016-01-07T23:28:11.923 回答
4

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

  ContextMenuStrip1.Show(dgvStudents, e.Location)

上下文菜单通常会在鼠标上移时显示,因此请改用 CellMouseUp 事件。

于 2013-03-09T17:56:39.193 回答