3

当鼠标悬停在一行上时,无论选择哪一行,我都想在 datagridview 行上获得下划线字体。

我明白了 - 一半:)

Private Sub aDgv_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles aDgv.MouseMove

    Dim hit As DataGridView.HitTestInfo = aDgv.HitTest(e.X, e.Y)
    If hit.Type = DataGridViewHitTestType.Cell Then
        aDgv.Rows(hit.RowIndex).DefaultCellStyle.Font = New Font(aDgv.DefaultCellStyle.Font, FontStyle.Underline)
    End If
End Sub

因此,当我遇到该行中的行文本时(如预期的那样),当我移至下一行时,下一行将变为下划线,但以前不会恢复为正常字体。

怎么做,只有鼠标悬停的行中的文本才会加下划线。
鼠标移到其他行时如何将字体重置为正常?

4

1 回答 1

3

要恢复正常Font,只需使用CellMouseLeave事件

Private Sub DataGridView1_MouseMove(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseMove
    Dim normalFont = New Font(DataGridView1.DefaultCellStyle.Font, FontStyle.Regular)
    Dim hit As DataGridView.HitTestInfo = DataGridView1.HitTest(e.X, e.Y)
    If hit.Type = DataGridViewHitTestType.Cell Then
        If DataGridView1.Rows(hit.RowIndex).Cells(hit.ColumnIndex).FormattedValue.ToString().Trim().Length > 0 Then
            DataGridView1.Rows(hit.RowIndex).DefaultCellStyle.Font = New Font(DataGridView1.DefaultCellStyle.Font, FontStyle.Underline)
        Else
            DataGridView1.Rows(hit.RowIndex).DefaultCellStyle.Font = normalFont
        End If
    End If
End Sub

Private Sub DataGridView1_CellMouseLeave(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellMouseLeave
    Dim normalFont = New Font(DataGridView1.DefaultCellStyle.Font, FontStyle.Regular)
    If (e.ColumnIndex > -1) Then
        If e.RowIndex > -1 Then
            If DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).FormattedValue.ToString().Trim().Length > 0 Then
                DataGridView1.Rows(e.RowIndex).DefaultCellStyle.Font = normalFont
            Else
                DataGridView1.Rows(e.RowIndex).DefaultCellStyle.Font = normalFont
            End If
        End If
    End If
End Sub
于 2012-12-23T23:33:41.473 回答