DataGridViewButtonColumn图标

时间:2009-11-23 15:32:22

标签: vb.net

我正在使用vb.net 2.0,我想在DataGridViewButtonColumn中设置一个图标或图像。我知道班上没有成员。有人有想法吗?

3 个答案:

答案 0 :(得分:4)

最佳答案来自http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/b0dfb55c-8bad-4c2d-aa72-36d8c138484e/

但是像往常一样,你使用Google vb.Net并在C#中获得答案。我在developerfusionwebsite上使用C#to vb.net工具来帮助我转换为vb.net但通常最终会改变相当数量。

一旦你有一个指针,这个非常容易。

dataGridView_CellPainting事件中添加类似

的内容
Private Sub InvoiceLinesDataGridView_CellPainting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles InvoiceLinesDataGridView.CellPainting

    If e.ColumnIndex = 3 AndAlso e.RowIndex >= 0 Then
        e.Paint(e.CellBounds, DataGridViewPaintParts.All)

        Dim bmpFind As Bitmap = My.Resources.binoc16_h1
        Dim ico As Icon = Icon.FromHandle(bmpFind.GetHicon)
        e.Graphics.DrawIcon(ico, e.CellBounds.Left + 3, e.CellBounds.Top + 3)
        e.Handled = True
    End If
End Sub

为了解释一下,我想使用一个位图资源,所以我也将它转换为一个图标。这对我来说非常好用,我得到一个带有图像的正确按钮列。列索引有点粗糙,因为它可能会改变,所以我希望使用列名引用 - 不应该太难,但你明白了。比我看到的其他选项容易得多,可以让你制作扩展的自定义列类型。

这真的应该只是原始控制的一部分,我无法理解为什么MS如此瘫痪了网格。我一直在尝试使用像Telerik这样的第三方控件,但原件似乎总是更加稳定,所以现在看看我是否可以坚持使用vanilla控件并在必要时添加扩展控件。

答案 1 :(得分:2)

我创建了一个可以在CellPainting datagridview事件中调用的方法。

  Public Shared Sub SetImageToDataGridViewButtonColumn_CallInCellPaintingEvent(ByRef img As Bitmap, e As System.Windows.Forms.DataGridViewCellPaintingEventArgs)
        e.Paint(e.CellBounds, DataGridViewPaintParts.All & (DataGridViewPaintParts.ContentBackground) & (DataGridViewPaintParts.ContentForeground))
        Dim destRect As Rectangle = New Rectangle(e.CellBounds.X + (e.CellBounds.Width - img.Width) / 2, e.CellBounds.Y + (e.CellBounds.Height - img.Height) / 2, img.Width, img.Height)
        Dim srcRect As Rectangle = New Rectangle(0, 0, img.Width, img.Height)
        e.Graphics.DrawImage(img, destRect, srcRect, GraphicsUnit.Pixel)
        e.Handled = True
  End Sub

在CellPainting事件中,调用此方法在按钮和e上传递所需的图像。确保使用某种条件来设置所需的列,例如If指定列0.另请注意我在My.Resources中有我的图像:

Private Sub dgv_CellPainting(sender As Object, e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles dgv.CellPainting
    If (e.ColumnIndex = 0 And e.RowIndex >= 0) Then
        SetImageToDataGridViewButtonColumn_CallInCellPaintingEvent(My.Resources.myImg, e)
    End If
End Sub

小贴士:我发现16x16 png非常适合我使用。您可以使用http://images.my-addr.com/resize_png_online_tool-free_png_resizer_for_web.php

调整大小

答案 2 :(得分:0)

您可以尝试使用DataGridViewImageColumn将事件附加到网格的CellContentClick事件(在事件处理过程中只有来自/ /是图像的列/列的事件)