■No35626に返信(HKaneさんの記事)
> DataGridViewで、> SelectionMode = FullRowSelect> MultiSelect = True> の状態にすると、複数行選択が可能ですが、> 1行のみ、または、連続行選択のみを許し、> 例えば10行あるデータで2行目と5行目のみの選択のような歯抜け選択を許さないようにする方法はあるでしょうか?
DataGridView を継承したコントロールを作り、SetSelectedRowCore をオーバーライドして、すでに選択された行が存在する場合、上の行か下の行が選択状態かどうかをチェックするといいのでは。
Public Class DataGridViewEx
Inherits DataGridView
Protected Overrides Sub SetSelectedRowCore(rowIndex As Integer, selected As Boolean)
If selected AndAlso SelectedRows.Count > 0 Then
If Not IsRowSelected(rowIndex + 1) AndAlso Not IsRowSelected(rowIndex - 1) Then
selected = False
End If
End If
MyBase.SetSelectedRowCore(rowIndex, selected)
End Sub
Private Function IsRowSelected(rowIndex As Integer) As Boolean
If rowIndex >= 0 AndAlso rowIndex < RowCount Then
Return Rows(rowIndex).Selected
End If
Return False
End Function
End Class