Как выделить текущую ячейку в DataGridView, когда SelectionMode = FullRowSelect - PullRequest
5 голосов
/ 16 сентября 2008

У меня есть редактируемый DataGridView с SelectionMode, установленным в FullRowSelect (поэтому вся строка выделяется, когда пользователь нажимает на любую ячейку). Однако я бы хотел, чтобы ячейка, в которой в данный момент находится фокус, была выделена другим задним цветом (чтобы пользователь мог ясно видеть, какую ячейку он собирается редактировать). Как я могу это сделать (я не хочу менять SelectionMode)?

Ответы [ 4 ]

9 голосов
/ 16 сентября 2008

Я нашел лучший способ сделать это, используя событие CellFormatting:

Private Sub uxContacts_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles uxContacts.CellFormatting
    If uxContacts.CurrentCell IsNot Nothing Then
        If e.RowIndex = uxContacts.CurrentCell.RowIndex And e.ColumnIndex = uxContacts.CurrentCell.ColumnIndex Then
            e.CellStyle.SelectionBackColor = Color.SteelBlue
        Else
            e.CellStyle.SelectionBackColor = uxContacts.DefaultCellStyle.SelectionBackColor
        End If
    End If
End Sub
1 голос
/ 05 октября 2015

Для меня CellFormatting делает трюк. У меня есть набор столбцов, которые можно редактировать (которые я сделал, чтобы они отображались другим цветом), и это код, который я использовал:

Private Sub Util_CellFormatting(ByVal Sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles dgvUtil.CellFormatting
    If dgvUtil.CurrentCell IsNot Nothing Then
        If e.RowIndex = dgvUtil.CurrentCell.RowIndex And e.ColumnIndex = dgvUtil.CurrentCell.ColumnIndex And (dgvUtil.CurrentCell.ColumnIndex = 10 Or dgvUtil.CurrentCell.ColumnIndex = 11 Or dgvUtil.CurrentCell.ColumnIndex = 13) Then
            e.CellStyle.SelectionBackColor = Color.SteelBlue
        Else
            e.CellStyle.SelectionBackColor = dgvUtil.DefaultCellStyle.SelectionBackColor
        End If
    End If
End Sub
0 голосов
/ 15 августа 2012

Попробуйте, метод OnMouseMove:

Private Sub DataGridView1_CellMouseMove(sender As Object, e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseMove
    If e.RowIndex >= 0 Then
        DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Style.SelectionBackColor = Color.Red
    End If
End Sub

Private Sub DataGridView1_CellMouseLeave(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellMouseLeave
    If e.RowIndex >= 0 Then
        DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Style.SelectionBackColor = DataGridView1.DefaultCellStyle.SelectionBackColor
    End If
End Sub
0 голосов
/ 16 сентября 2008

Вы хотите использовать метод DataGridView RowPostPaint. Позвольте каркасу нарисовать строку, а затем вернитесь и закрасьте ячейку, в которой вы заинтересованы

Пример здесь: MSDN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...