#vb.net
#vb.net
Вопрос:
Ну, привет! Просто у меня возник быстрый вопрос о коде, который у меня есть. Я пытаюсь открыть контекстное меню, когда щелкаю правой кнопкой мыши по ячейке в моем DataGridView. Вот что у меня есть:
Private Sub DataGridView1_CellMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseClick
If e.Button = Windows.Forms.MouseButtons.Right Then
If e.ColumnIndex = -1 = False And e.RowIndex = -1 = False Then
Me.DataGridView1.ClearSelection()
Me.DataGridView1.CurrentCell = Me.DataGridView1.Item(e.ColumnIndex, e.RowIndex)
DataGridView1.ContextMenuStrip = mnuCell
End If
End If
End Sub
К сожалению, когда я впервые щелкаю правой кнопкой мыши по программе, она не сразу открывает контекстное меню. Он только выбирает ячейку. Но если я снова щелкну по нему правой кнопкой мыши, откроется контекстное меню.
Моя вторая проблема заключается в том, что если я щелкну правой кнопкой мыши по другой ячейке, когда контекстное меню все еще открыто, оно не выберет другую ячейку, которую я щелкнул правой кнопкой мыши. Что я делаю не так?
Ответ №1:
Контекстное меню появится перед запуском события CellMouseClick, поэтому вместо этого переместите свой код в CellMouseDown.
Private Sub DataGridView1_CellMouseDown(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseDown
If e.Button = Windows.Forms.MouseButtons.Right Then
If e.ColumnIndex <> -1 And e.RowIndex <> -1 Then
Me.DataGridView1.ClearSelection()
Dim cell = Me.DataGridView1.Item(e.ColumnIndex, e.RowIndex)
Me.DataGridView1.CurrentCell = cell
cell.Selected = True 'Needed if you right click twice on the same cell
DataGridView1.ContextMenuStrip = mnuCell
End If
End If
End Sub
Комментарии:
1. Ооо, правильно, потому что событие MouseClick включает мышь вверх и вниз. Вау, никогда бы не поймал это сам. Спасибо! 🙂