São Paulo, 20 de Maio de 2012
VB.NET – Criando um ImageButtonColumn (Coluna de botão de imagem ) em um DataGridView.
Por DANIEL MONTEIRO VAZ (DANIEL_M_VAZ@YAHOO.COM.BR)

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

End Namespace



>>Comente Este Artigo!

Enviado por ZÉ (Ze@zezzao.com) em 6/4/2011 (00:00)

Cadê a classe?

Enviado por JONATHAN STECKER (jonathan.stecker@gmail.com) em 12/9/2011 (00:00)

Excelente! Bem detalhado e funcional. Parabéns pelo artigo.