2016-10-06 32 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 

残念ながら、プログラムで初めて右クリックすると、すぐにコンテキストメニューが開きません。それはセルを選択するだけです。しかし、もう一度右クリックすると、コンテキストメニューが開きます。

私の2番目の問題は、コンテキストメニューを開いたまま別のセルを右クリックすると、右クリックされた他のセルが選択されなくなるということです。私は間違って何をしていますか?

答えて

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

関連する問題