以前に作成した 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 で、右クリックの場合、ユーザーがデータ行をクリックした場合、コンテキスト メニューにマウスの位置ではなく、上部に表示する必要があります。