J'ai un DataGridView éditable avec SelectionMode défini sur FullRowSelect (donc la ligne entière est mise en surbrillance lorsque l'utilisateur clique sur n'importe quelle cellule). Cependant, j'aimerais que la cellule qui a actuellement le focus soit mise en évidence avec une couleur de fond différente (afin que l'utilisateur puisse voir clairement quelle cellule il va éditer). Comment puis-je faire cela (je ne veux pas changer le SelectionMode)?Comment puis-je mettre en surbrillance la cellule actuelle dans un DataGridView lorsque SelectionMode = FullRowSelect
Répondre
Je me suis une meilleure façon 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
Vous souhaitez utiliser la méthode DataGridView RowPostPaint. Laissez le cadre dessiner la ligne, et aller ensuite en arrière et la couleur dans la cellule qui vous intéresse.
Un exemple est ici à MSDN
Merci pour votre aide. Si je comprends bien, cependant, l'article MSDN semble suggérer que je devrais utiliser la méthode RowPrePaint. Cependant, même si je ne peux toujours pas trouver le bon code à utiliser. –
Essayez cela, 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
Pour moi CellFormatting
le tour est joué. J'ai un ensemble de colonnes que l'on peut éditer (que je fait apparaître dans une couleur différente), ce qui est le code utilisé i
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
Ceci est juste une copie de la réponse acceptée 7 ans auparavant. Au lieu de re-poster, vous devriez upvote la réponse acceptée lorsque vous avez assez de rep. – OhBeWise
[Autre option] (http: // stackoverflow .com/a/35297585/3773066) J'ai codé où le rectangle de focus sera toujours affiché sur 'CurrentCell'. Ce n'est pas un 'BackColor' différent, mais a le même effet. – OhBeWise