Как я могу выделить текущую ячейку в DataGridView, когда SelectionMode=FullRowSelect

StackOverflow https://stackoverflow.com/questions/73471

Вопрос

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

Это было полезно?

Решение

Я нашел лучший способ сделать это, используя событие форматирования ячеек:

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

Другие советы

Для меня 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

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

Пример находится здесь, по адресу MSDN

Попробуйте этот метод 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top