다른 사용자 정의 컨트롤과 폼에 포함 된 VB.NET 사용자 정의 컨트롤이 있습니다. 내부 사용자 정의 컨트롤에는 DataGridView 행 클릭에 의해 트리거되는 컨텍스트가 있습니다. 이렇게하면 이벤트 처리기가 성공적으로 활성화되지만 ("확인"메시지가 표시됨) 보낸 사람이 선택한 항목을 보내지 않습니다 (다른 MsgBox 메시지가 표시되지 않음). 다음은 코드입니다.ContextMenuStrip 선택한 항목이 UserControl에서 손실되었습니다.
Public CMSV As ContextMenuStrip
Private grdSourceViewerCurrentRow As Long
Public Sub grdSourceViewer_RowHeaderMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles grdSourceViewer.RowHeaderMouseClick
'code to review/edit source details
Select Case e.Button
Case Windows.Forms.MouseButtons.Right
grdSourceViewerCurrentRow = e.RowIndex 'retain for downstream code
CMSV = New ContextMenuStrip
AddHandler CMSV.MouseClick, AddressOf SourceViewDocumentationEdit
CMSV.Items.Add("Edit")
CMSV.Items.Add("Transfer to Evidence")
Dim Pt As Point = New Point()
Pt.X = grdSourceViewer.PointToClient(Cursor.Position).X
Pt.Y = grdSourceViewer.PointToClient(Cursor.Position).Y + 20
CMSV.Show(sender, Pt)
Case Windows.Forms.MouseButtons.Left
Exit Sub
Case Else
Exit Sub
End Select
End Sub
Public Sub SourceViewDocumentationEdit()
MsgBox("OK") 'I can see it reaches here
Dim cc As ToolStripItemCollection = CMSV.Items
Dim SelectedItem As Integer = -1
Dim SelectedValue As String = ""
For i As Integer = 0 To cc.Count - 1
If cc.Item(i).Selected Then
SelectedItem = i
SelectedValue = cc.Item(SelectedItem).Text
Exit For
End If
Next
Select Case SelectedValue
Case "Edit"
MsgBox("Edit code here")
Case "Transfer to Evidence"
MsgBox("Transfer code here")
End Select
End Sub
무엇이 잘못 되었나요? 클릭 한 항목에 대한 정보를 잃어 버리는 이유는 무엇입니까?
둘 다 정확하고 도움이됩니다. CM을 한 번 설정하고 두 CM 항목의 이벤트 처리기를 설정해야했습니다. 이 작동합니다. 내 전략은 중첩되지 않은 사용자 컨트롤에서 작동했지만이 복잡성으로 인해 결함이있는 논리가 나타났습니다. –