2

以前に作成した VB.NET WINdows フォーム アプリケーションを強化しています。

フォームの 1 つで、フォームの読み込み時にストアド プロシージャからデータが取り込まれた DataGridView があります。

ユーザーが権限を持っている場合、ユーザーが datagridview のレコードを右クリックしたときに、ユーザーがレコードを削除できるコンテキスト メニューを表示したいと考えています。

これが私のコードです:

Private Sub m_SetEnabledContextMenu()
  ' for Delete record
  If Not objUser.HasAuthority("Delete Record") Then
    Me.DataGridView1.ContextMenu = Nothing
    Me.mnuContextEquationSubmission.Enabled = False
  Else
    ' Me.DataGridView1.ContextMenu = Me.mnuContextEquationSubmission
    Me.mnuContextEquationSubmission.Enabled = True
  End If
  'Rest is not problem
End Sub

Private Sub DataGridView1_CellMouseDown(ByVal sender As Object, _
        ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) _
            Handles DataGridView1.CellMouseDown
  If e.Button = System.Windows.Forms.MouseButtons.Right Then
    For Each row As DataGridViewRow In DataGridView1.SelectedRows
      row.Selected = False
    Next
    DataGridView1.Rows(e.RowIndex).Selected = True

    'MessageBox.Show("DataGridView1_CellMouseDown on row " & e.RowIndex.ToString)
    m_intSelRow = e.RowIndex
    m_intSelCol = e.ColumnIndex

    m_strRecordID = DataGridView1.Rows(e.RowIndex).Cells(0).Value

    'mnuContextEquationSubmission.Show(DataGridView1, e.Location)
    mnuContextEquationSubmission.Show(CType(sender, Control), e.Location)
  End If
End Sub

ご覧のとおり、プロシージャ「m_SetEnabledContextMenu」で、ユーザーがレコードを削除する権限を持っているかどうかを判断します。したがって、コンテキスト メニューがアクティブになります (または、少なくとも、それが私が望んでいることです)。権限がない場合は、メニューを非表示にして無効にする必要があります。

イベント ハンドラー DataGridView1_CellMouseDown で、右クリックの場合、ユーザーがデータ行をクリックした場合、コンテキスト メニューにマウスの位置ではなく、上部に表示する必要があります。

4

1 に答える 1

4

使用するmnuContextEquationSubmission.Show(Me, Me.PointToClient(MousePosition))

于 2013-02-26T15:30:28.823 に答える