当SelectionMode = FullRowSelect时,如何突出显示DataGridView中的当前单元格

时间:2008-09-16 15:18:58

标签: .net vb.net winforms datagridview

我有一个可编辑的DataGridView,SelectionMode设置为FullRowSelect(因此当用户点击任何单元格时,整行会突出显示)。但是,我希望当前具有焦点的单元格以不同的背景颜色突出显示(因此用户可以清楚地看到他们将要编辑的单元格)。我该怎么做(我不想改变SelectionMode)?

4 个答案:

答案 0 :(得分:9)

我想出了一个更好的方法,使用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

答案 1 :(得分:1)

对我来说INSTALLED_APPS += ('mpcomp',) 做了特技。我有一组可以编辑的列(我用不同的颜色显示),这是我使用的代码:

CellFormatting

答案 2 :(得分:0)

您想要使用DataGridView RowPostPaint方法。让框架绘制行,然后返回并在您感兴趣的单元格中着色。

一个例子是MSDN

答案 3 :(得分:0)

试试这个,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