VB.NET – Criando um ImageButtonColumn (Coluna de botão de imagem ) em um DataGridView.
Crie a classe ColumButtons.vb:
Imports System
Imports System.Drawing
Imports System.IO
Imports System.Text
Imports System.Windows.Forms
Imports System.Windows.Forms.VisualStyles
Namespace DGV_Image_Button
Public MustInherit Class DataGridViewImageButtonCell
Inherits DataGridViewButtonCell
Private _enabled As Boolean
Private _buttonState As PushButtonState
Protected _buttonImageHot As Image
Protected _buttonImageNormal As Image
Protected _buttonImageDisabled As Image
Private _buttonImageOffset As Integer
Protected Sub New()
_enabled = False
_buttonState = PushButtonState.Disabled
_buttonImageOffset = 2
LoadImages()
End Sub
Public Property Enabled() As Boolean
Get
Return _enabled
End Get
Set(ByVal value As Boolean)
_enabled = value
_buttonState = If(value, PushButtonState.Normal, PushButtonState.Disabled)
End Set
End Property
Public Property ButtonState() As PushButtonState
Get
Return _buttonState
End Get
Set(ByVal value As PushButtonState)
_buttonState = value
End Set
End Property
Public ReadOnly Property ButtonImage() As Image
Get
Select Case _buttonState
Case PushButtonState.Disabled
Return _buttonImageDisabled
Case PushButtonState.Hot
Return _buttonImageHot
Case PushButtonState.Normal
Return _buttonImageNormal
Case PushButtonState.Pressed
Return _buttonImageNormal
Case PushButtonState.[Default]
Return _buttonImageNormal
Case Else
Return _buttonImageNormal
End Select
End Get
End Property
Protected Overloads Overrides Sub Paint(ByVal graphics As Graphics, ByVal clipBounds As Rectangle, ByVal cellBounds As Rectangle, ByVal rowIndex As Integer, ByVal elementState As DataGridViewElementStates, ByVal value As Object, _
ByVal formattedValue As Object, ByVal errorText As String, ByVal cellStyle As DataGridViewCellStyle, ByVal advancedBorderStyle As DataGridViewAdvancedBorderStyle, ByVal paintParts As DataGridViewPaintParts)
If (paintParts And DataGridViewPaintParts.Background) = DataGridViewPaintParts.Background Then
Dim cellBackground As New SolidBrush(cellStyle.BackColor)
graphics.FillRectangle(cellBackground, cellBounds)
cellBackground.Dispose()
End If
If (paintParts And DataGridViewPaintParts.Border) = DataGridViewPaintParts.Border Then
PaintBorder(graphics, clipBounds, cellBounds, cellStyle, advancedBorderStyle)
End If
Dim buttonArea As Rectangle = cellBounds
Dim buttonAdjustment As Rectangle = BorderWidths(advancedBorderStyle)
buttonArea.X += buttonAdjustment.X
buttonArea.Y += buttonAdjustment.Y
buttonArea.Height -= buttonAdjustment.Height
buttonArea.Width -= buttonAdjustment.Width
Dim imageArea As New Rectangle(buttonArea.X + _buttonImageOffset, buttonArea.Y + _buttonImageOffset, 25, 12)
ButtonRenderer.DrawButton(graphics, buttonArea, ButtonImage, imageArea, False, ButtonState)
End Sub
Public MustOverride Sub LoadImages()
End Class
' Cria a classe da coluna para exibir o botão Salvar.
Public Class DataGridViewImageButtonSaveColumn
Inherits DataGridViewButtonColumn
Public Sub New()
Me.CellTemplate = New DataGridViewImageButtonSaveCell()
Me.Width = 30
Me.Resizable = DataGridViewTriState.[False]
End Sub
End Class
' Cria a classe para a célula que exibirá o botão Salvar. Esta classe é derivada da classe abstrata DataGridViewImageButtonCell. Porém, os únicos métodos para se implementar é o LoadImages para carregar o status do botão como Normal, Ativo ou Desativado.
Public Class DataGridViewImageButtonSaveCell
Inherits DataGridViewImageButtonCell
Public Overloads Overrides Sub LoadImages()
_buttonImageNormal = My.Resources.saveHS
_buttonImageDisabled = My.Resources.saveHS
_buttonImageHot = My.Resources.saveHS
End Sub
End Class
' Utilizando o mesmo conceito, defino outras colunas para que eu possa utilizarno meu projeto.
Public Class DataGridViewImageButtonPrintColumn
Inherits DataGridViewButtonColumn
Public Sub New()
Me.CellTemplate = New DataGridViewImageButtonPrintCell()
Me.Width = 30
Me.Resizable = DataGridViewTriState.[False]
End Sub
End Class
Public Class DataGridViewImageButtonPrintCell
Inherits DataGridViewImageButtonCell
Public Overloads Overrides Sub LoadImages()
_buttonImageNormal = My.Resources.printer_20
_buttonImageDisabled = My.Resources.printer_20
_buttonImageHot = My.Resources.printer_20
End Sub
End Class
Public Class DataGridViewImageButtonDelColumn
Inherits DataGridViewButtonColumn
Public Sub New()
Me.CellTemplate = New DataGridViewImageButtonDellCell()
Me.Width = 30
Me.Resizable = DataGridViewTriState.[False]
End Sub
End Class
Public Class DataGridViewImageButtonDellCell
Inherits DataGridViewImageButtonCell
Public Overloads Overrides Sub LoadImages()
_buttonImageNormal = My.Resources.gridviewdelete
_buttonImageDisabled = My.Resources.gridviewdelete
_buttonImageHot = My.Resources.gridviewdelete
End Sub
End Class
Public Class DataGridViewImageButtonOpenColumn
Inherits DataGridViewButtonColumn
Public Sub New()
Me.CellTemplate = New DataGridViewImageButtonOpenCell()
Me.Width = 30
Me.Resizable = DataGridViewTriState.[False]
End Sub
End Class
Public Class DataGridViewImageButtonOpenCell
Inherits DataGridViewImageButtonCell
Public Overloads Overrides Sub LoadImages()
_buttonImageNormal = My.Resources.folder_20
_buttonImageDisabled = My.Resources.folder_20
_buttonImageHot = My.Resources.folder_20
End Sub
End Class
Public Class DataGridViewImageButtonAceptColumn
Inherits DataGridViewButtonColumn
Public Sub New()
Me.CellTemplate = New DataGridViewImageButtonAceptCell()
Me.Width = 30
Me.Resizable = DataGridViewTriState.[False]
End Sub
End Class
Public Class DataGridViewImageButtonAceptCell
Inherits DataGridViewImageButtonCell
Public Overloads Overrides Sub LoadImages()
_buttonImageNormal = My.Resources.accepted_20
_buttonImageDisabled = My.Resources.accepted_20
_buttonImageHot = My.Resources.accepted_20
End Sub
End Class
Public Class DataGridViewImageButtonSelColumn
Inherits DataGridViewButtonColumn
Public Sub New()
Me.CellTemplate = New DataGridViewImageButtonSellCell()
Me.Width = 30
Me.Resizable = DataGridViewTriState.[False]
End Sub
End Class
Public Class DataGridViewImageButtonSellCell
Inherits DataGridViewImageButtonCell
Public Overloads Overrides Sub LoadImages()
_buttonImageNormal = My.Resources.app_20
_buttonImageDisabled = My.Resources.app_20
_buttonImageHot = My.Resources.app_20
End Sub
End Class
Public Class DataGridViewImageButtonMetricaColumn
Inherits DataGridViewButtonColumn
Public Sub New()
Me.CellTemplate = New DataGridViewImageButtonMetricaCell()
Me.Width = 30
Me.Resizable = DataGridViewTriState.[False]
End Sub
End Class
Public Class DataGridViewImageButtonMetricaCell
Inherits DataGridViewImageButtonCell
Public Overloads Overrides Sub LoadImages()
_buttonImageNormal = My.Resources.RulerHS
_buttonImageDisabled = My.Resources.RulerHS
_buttonImageHot = My.Resources.RulerHS
End Sub
End Class