Winforms Datagridviewcell工具提示不';修改任何单元格的图像后不显示

Winforms Datagridviewcell工具提示不';修改任何单元格的图像后不显示,winforms,datagridview,Winforms,Datagridview,在winforms应用程序中,我循环遍历datagridview的单元格,并根据其他列中的值为特定单元格添加工具提示。我在cellformatting事件处理程序中这样做,它工作得非常好。代码如下: Private Sub dgvResults_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles dgvResults.CellFormatting Select Case dgvRes

在winforms应用程序中,我循环遍历datagridview的单元格,并根据其他列中的值为特定单元格添加工具提示。我在cellformatting事件处理程序中这样做,它工作得非常好。代码如下:

Private Sub dgvResults_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles dgvResults.CellFormatting
Select Case dgvResults.Columns(e.ColumnIndex).Name
    Case "TradeInValue"
        DirectCast(dgvResults.Rows(e.RowIndex).Cells("TradeInValue"), DataGridViewTextBoxCell).ToolTipText = "Min = " & CDec(dgvResults.Item("BB_Min", e.RowIndex).FormattedValue).ToString("$#####.##") & ", Max = " & CDec(dgvResults.Item("BB_Max", e.RowIndex).FormattedValue).ToString("$#####.##")
        If Not IsNothing(dgvResults.Item("SelectedTrimIndex", e.RowIndex).FormattedValue) AndAlso dgvResults.Item("SelectedTrimIndex", e.RowIndex).FormattedValue.ToString.Trim.Length > 0 AndAlso CInt(dgvResults.Item("SelectedTrimIndex", e.RowIndex).FormattedValue.ToString) <> -1 Then
            If dgvResults.Item("ValueList", e.RowIndex).FormattedValue.ToString.Length > 0 Then
                Dim ValueParts() As String = dgvResults.Item("ValueList", e.RowIndex).FormattedValue.ToString.Split("|")
                'Dim selectedTrim As String = ValueParts(dgvResults.Item("SelectedTrimIndex", e.RowIndex).FormattedValue)
            End If
        End If

End Select
End Sub
添加此代码后,工具提示不再显示。CellToolTiptTextRequired事件激发,并在参数中显示正确的文本,但从不显示。注释掉将新图像分配给datagridviewimagecells的行,工具提示再次开始显示


我希望这个解释是足够的。有什么想法吗?

使用下面的代码,每次绘制单元格时都会创建一个新的
位图
实例,这样您将很容易进入内存,GDI对象也会泄漏。这也会导致您的
工具提示不显示

DirectCast(dgvResults.Item(e.ColumnIndex, e.RowIndex), DataGridViewImageCell).Value = New Bitmap(1, 1)
在类级别定义空位图或添加为嵌入资源并使用它

Dim emptyBitmap As New Bitmap(1, 1);

DirectCast(dgvResults.Item(e.ColumnIndex, e.RowIndex), DataGridViewImageCell).Value = emptyBitmap

美丽的感谢您解决了我的问题,并帮助我的应用程序在此过程中更加高效。
Dim emptyBitmap As New Bitmap(1, 1);

DirectCast(dgvResults.Item(e.ColumnIndex, e.RowIndex), DataGridViewImageCell).Value = emptyBitmap