http://silent-diary.at.webry.info/theme/15e75af35e.html
ユーザーコントロールをDataGridViewのセルに表示させるところまではできた。でも、ユーザーコントロールに置いているボタンをクリックするためには、セルをクリックしてアクティブに→もう一回クリックして編集モードにする必要があって、結局ボタンをクリックするために3回もクリックしないといけないということになって詰まってた。
DataGridViewのCellMouseEnterイベントで、その引数e As DataGridViewCellEventArgsからセルの列と行の番号が取れる。まず、その番号からアクティブにするセルを指定する。つまり、マウスカーソルが乗ったセルがアクティブになる。その後にBeginEditメソッドでDataGridViewを編集モードにすると、マウスカーソルが乗っただけでそのセルのボタンがクリックできる状態になる。If e.ColumnIndex >= 0 And e.RowIndex >= 0 then としているのは、行や列のヘッダーにマウスカーソルが乗ったときはその値が-1になって、その番号のセルをアクティブにしようとしてエラーになるから。
多分、これで解決できたのではないだろうか。
Private Sub DataGridView1_CellMouseEnter(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellMouseEnter
If e.ColumnIndex >= 0 And e.RowIndex >= 0 Then
DataGridView1.CurrentCell = DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex)
End If
DataGridView1.BeginEdit(False)
End Sub