Чтобы отменить выбор всех строк и ячеек в DataGridView
, вы можете использовать метод ClearSelection
:
myDataGridView.ClearSelection()
Если вы не хотите, чтобы даже первая строка / ячейка отображалась выделенной, вы можете установить для свойства CurrentCell
значение Nothing
/ null
, что временно скрыть прямоугольник фокуса, пока элемент управления снова не получит фокус:
myDataGridView.CurrentCell = Nothing
Чтобы определить, когда пользователь нажал на пустую часть DataGridView
, вам нужно обработать его событие MouseUp
. В этом случае вы можете HitTest
щелкнуть и наблюдать за этим, чтобы указать HitTestInfo.Nowhere
. Например:
Private Sub myDataGridView_MouseUp(ByVal sender as Object, ByVal e as System.Windows.Forms.MouseEventArgs)
''# See if the left mouse button was clicked
If e.Button = MouseButtons.Left Then
''# Check the HitTest information for this click location
If myDataGridView.HitTest(e.X, e.Y) = DataGridView.HitTestInfo.Nowhere Then
myDataGridView.ClearSelection()
myDataGridView.CurrentCell = Nothing
End If
End If
End Sub
Конечно, вы также можете создать подкласс существующего элемента управления DataGridView
, чтобы объединить все эти функции в единый пользовательский элемент управления. Вам нужно переопределить его OnMouseUp
метод аналогично тому, как показано выше. Я также хотел бы предоставить для удобства открытый метод DeselectAll
, который вызывает метод ClearSelection
и устанавливает для свойства CurrentCell
значение Nothing
.
(Образцы кода все произвольно в VB.NET, потому что вопрос не указывает язык - извинения, если это не ваш родной диалект.)