2008-09-16 7 views
4

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

+0

[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

Répondre

8

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 
0

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

+0

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. –

0

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 
1

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

+0

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

Questions connexes