Estaba buscando una respuesta a esto también. Terminé escribiendo un sub genérico que podría llamarse desde cualquier DataGridView, ya que tenía muchas aplicaciones y quería que todas se comportaran de la misma manera. Esto funcionó bien para mí, así que quise compartirlo con cualquier persona que tropezó con esta publicación.
En el caso MouseClick para la DGV agrego el código
Private Sub SomeGrid_MouseClick(sender As Object, e As MouseEventArgs) Handles SomeGrid.MouseClick
DGV_MouseClick(sender, e)
End Sub
que llama a los siguientes sub que almaceno en un módulo compartido
Public Sub DGV_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
Try
Dim dgv As DataGridView = sender
Dim h As DataGridView.HitTestInfo = dgv.HitTest(e.X, e.Y)
If h.RowIndex > -1 AndAlso h.ColumnIndex > -1 AndAlso dgv.Columns(h.ColumnIndex).CellType Is GetType(DataGridViewComboBoxCell) Then
Dim cell As DataGridViewComboBoxCell = dgv.Rows(h.RowIndex).Cells(h.ColumnIndex)
If Not dgv.CurrentCell Is cell Then dgv.CurrentCell = cell
If Not dgv.IsCurrentCellInEditMode Then
dgv.BeginEdit(True)
CType(dgv.EditingControl, ComboBox).DroppedDown = True
End If
End If
Catch ex As Exception
End Try
End Sub
Nunca alcancé los errores, sólo incluyo el Try ... código de captura de alguna rara instancia en la que no podía pensar que arrojara una excepción. No quería que al usuario le molestaran los mensajes de error para este escenario. Si el submarinista falla, lo más probable es que el DGV simplemente se comporte como siempre.
Me alegro de que tengo trabajo! – thismat
Esto fue increíblemente útil. – BrianH