Comment puis-je mettre en surbrillance la cellule actuelle dans un DataGridView lorsque SelectionMode = FullRowSelect

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

Question

J'ai un DataGridView modifiable avec SelectionMode défini sur FullRowSelect (la ligne entière est donc mise en surbrillance lorsque l'utilisateur clique sur une cellule). Cependant, je souhaiterais que la cellule qui a actuellement le focus soit mise en surbrillance avec une couleur de fond différente (pour que l'utilisateur puisse voir clairement quelle cellule il est sur le point de modifier). Comment puis-je faire cela (je ne veux pas changer le SelectionMode)?

Était-ce utile?

La solution

J'ai trouvé un meilleur moyen de le faire en utilisant l'événement 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

Autres conseils

Pour moi, CellFormatting fait le tour. J'ai un ensemble de colonnes que l'on peut éditer (que j'ai fait apparaître dans une couleur différente) et voici le code que j'ai utilisé:

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

Vous souhaitez utiliser la méthode DataGridView RowPostPaint. Laissez le cadre tracer la ligne, puis revenez en arrière et coloriez la cellule qui vous intéresse.

Vous en trouverez un exemple à l'adresse MSDN

.

Essayez ceci, la méthode 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top