2016-10-06 4 views
0

Ну, привет! Просто был быстрый вопрос здесь о коде, который у меня есть. Я пытаюсь открыть контекстное меню, когда я нажимаю правой кнопкой мыши на ячейке в моем DataGridView. Вот что у меня есть:Открытие контекстного меню в 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 

К сожалению, когда я правой кнопкой мыши в первый раз на программу, она не открывается контекстное меню сразу. Он выбирает только ячейку. Но если я снова нажму на него, он откроет контекстное меню.

Моя вторая проблема заключается в том, что если я щелкнул правой кнопкой мыши другую ячейку с открытым контекстным меню, она не будет выбирать другую ячейку, которую я щелкнул правой кнопкой мыши. Что я делаю не так?

ответ

0

Контекстное меню будет всплывать до того, как событие 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 
+0

Охх, правильно, потому что событие MouseClick включает в себя мышь вверх и вниз. Ничего себе, я никогда бы этого не поймал. Благодаря! :) – rsprodftw1

Смежные вопросы