Comment puis-je mettre en surbrillance la cellule actuelle dans un DataGridView lorsque SelectionMode = FullRowSelect
-
09-06-2019 - |
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)?
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