在鼠标悬停时更改datagridview中所选行的背景颜色

时间:2012-04-03 00:26:06

标签: vb.net datagridview

我正在尝试在表单上设置DataGridView,以便突出显示鼠标下的行。除了当前选中的行不会在MouseEnter上突出显示之外,我已经使用了以下内容。

表单包含4个单独的DataGridView,唯一突出显示的行应该是鼠标光标下的行。

Private Sub dgvPrjDwgs_CellMouseEnter(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvPrjDwgs.CellMouseEnter
        If e.RowIndex > -1 Then
            dgvPrjDwgs.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.BlanchedAlmond
        End If
End Sub

Private Sub dgvPrjDwgs_CellMouseLeave(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvPrjDwgs.CellMouseLeave
        If e.RowIndex > -1 Then
            dgvPrjDwgs.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.DimGray
        End If
End Sub

以下图片是将鼠标放在随机未选中的行上。米色是我想要展示的高光颜色。

Highlight, highlight, you so fine, you so fine you blow my mind!

此图片是鼠标悬停在当前选定的行上。当鼠标悬停在它上面时,我希望背景颜色变为BlanchedAlmond。

Why you no highlight when I want.

所以,我改变了想法并尝试使用MouseEnter将该行设为选定行。这很好用。但是当鼠标离开数据网格并移动到另一个(坏)时,它会选择行。我尝试将选定的BackColor设置为与未选择的BackColor相匹配,现在它根本不会突出显示。

Private Sub dgvPrjDwgs_CellMouseEnter(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvPrjDwgs.CellMouseEnter
    dgvPrjDwgs.DefaultCellStyle.SelectionBackColor = Color.BlanchedAlmond
    If e.RowIndex > -1 Then
        dgvPrjDwgs.Rows(e.RowIndex).Selected = True
    End If
End Sub
Private Sub dgvPrjDwgs_CellMouseLeave(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvPrjDwgs.CellMouseLeave
    dgvPrjDwgs.DefaultCellStyle.SelectionBackColor = Color.DimGray
End Sub

请帮助:)

1 个答案:

答案 0 :(得分:5)

让它发挥作用。

我使用的是DefaultCellStyle而不是RowsDefaultCellStyle。这是最终的代码。

Private Sub dgvPrjDwgs_CellMouseEnter(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvPrjDwgs.CellMouseEnter
        dgvPrjDwgs.RowsDefaultCellStyle.SelectionBackColor = Color.BlanchedAlmond
        If e.RowIndex > -1 Then
            dgvPrjDwgs.Rows(e.RowIndex).Selected = True
        End If
    End Sub
    Private Sub dgvPrjDwgs_CellMouseLeave(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvPrjDwgs.CellMouseLeave
        dgvPrjDwgs.RowsDefaultCellStyle.SelectionBackColor = Color.DimGray
    End Sub