2009-11-23 35 views

回答

4

最好的答案是從http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/b0dfb55c-8bad-4c2d-aa72-36d8c138484e/

但像往常一樣,你谷歌vb.Net並在C#中得到答案。我在developerfusion網站上使用了C#到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這樣的第三方控件,但是原件似乎總是比較穩定,所以現在看到我是否可以堅持使用香草控件並在需要的地方添加我的擴展。

0

您可以嘗試使用DataGridViewImageColumn添加附加一個事件到網格的CellContentClick事件(在事件過程中只的事件從列/列是正在添加/是圖像)

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上傳遞想要的圖像。確保你使用某種形式的條件,你需要的列設置,這個例子中,如果指定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 

溫馨提示:我發現16×16的PNG是完美的我的用途。您可以使用http://images.my-addr.com/resize_png_online_tool-free_png_resizer_for_web.php