我正在使用vb.net 2.0,我想在DataGridViewButtonColumn中设置一个图标或图像。我知道班上没有成员。有人有想法吗?
答案 0 :(得分:4)
但是像往常一样,你使用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事件(在事件处理过程中只有来自/ /是图像的列/列的事件)