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 に答える