valor una selectedrows seleccionar seleccionada obtener net fila column celda .net vb.net winforms datagridview

.net - una - ¿Cómo puedo resaltar la celda actual en un DataGridView cuando SelectionMode=FullRowSelect?



selectedrows datagridview c# (4)

Tengo un DataGridView editable con SelectionMode configurado en FullRowSelect (por lo que toda la fila se resalta cuando el usuario hace clic en cualquier celda). Sin embargo, me gustaría que la celda que actualmente tiene foco se destaque con un color de fondo diferente (para que el usuario pueda ver claramente qué celda están a punto de editar). ¿Cómo puedo hacer esto (no quiero cambiar el SelectionMode)?


Descubrí una forma mejor de hacerlo, usando el evento 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


Desea utilizar el método DataGridView RowPostPaint. Deje que el marco dibuje la fila, y luego retroceda y coloree en la celda que le interesa.

Un ejemplo está aquí en MSDN


Para mí, CellFormatting hace el truco. Tengo un conjunto de columnas que uno puede editar (que hice aparecer en un color diferente) y este es el código que utilicé

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


Pruebe esto, el método 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