title: Adding a margin to custom datagridview column
body: <p>I've used the following code, <a href="http://www.vb-tips.com/TextAndImageColumn.aspx" rel="nofollow">taken from here</a>, to create my own custom column for datagridview, so that I can now have images and text in the same cell:</p>
  
  <pre><code>Public Class TextAndImageColumn
      Inherits DataGridViewTextBoxColumn
      Private imageValue As Image
      Private m_imageSize As Size
      Public Sub New()
          Me.CellTemplate = New TextAndImageCell
      End Sub
      Public Overloads Overrides Function Clone() As Object
          Dim c As TextAndImageColumn = TryCast(MyBase.Clone, TextAndImageColumn)
          c.imageValue = Me.imageValue
          c.m_imageSize = Me.m_imageSize
          Return c
      End Function
      Public Property Image() As Image
          Get
              Return Me.imageValue
          End Get
          Set(ByVal value As Image)
              Me.imageValue = value
              Me.m_imageSize = value.Size
              Dim inheritedPadding As Padding = Me.DefaultCellStyle.Padding
              Me.DefaultCellStyle.Padding = New Padding(ImageSize.Width, inheritedPadding.Top, inheritedPadding.Right, inheritedPadding.Bottom)
          End Set
      End Property
      Private ReadOnly Property TextAndImageCellTemplate() As TextAndImageCell
          Get
              Return TryCast(Me.CellTemplate, TextAndImageCell)
          End Get
      End Property
      Friend ReadOnly Property ImageSize() As Size
          Get
              Return m_imageSize
          End Get
      End Property
  End Class
  Public Class TextAndImageCell
      Inherits DataGridViewTextBoxCell
      Private imageValue As Image
      Private imageSize As Size
      Public Overloads Overrides Function Clone() As Object
          Dim c As TextAndImageCell = TryCast(MyBase.Clone, TextAndImageCell)
          c.imageValue = Me.imageValue
          c.imageSize = Me.imageSize
          Return c
      End Function
      Public Property Image() As Image
          Get
              If Me.OwningColumn Is Nothing OrElse Me.OwningTextAndImageColumn Is Nothing Then
                  Return imageValue
              Else
                  If Not (Me.imageValue Is Nothing) Then
                      Return Me.imageValue
                  Else
                      Return Me.OwningTextAndImageColumn.Image
                  End If
              End If
          End Get
          Set(ByVal value As Image)
              Me.imageValue = value
              Me.imageSize = value.Size
              Dim inheritedPadding As Padding = Me.InheritedStyle.Padding
              Me.Style.Padding = New Padding(imageSize.Width, inheritedPadding.Top, inheritedPadding.Right, inheritedPadding.Bottom)
          End Set
      End Property
      Protected Overloads Overrides Sub Paint(graphics As Graphics, clipBounds As Rectangle, cellBounds As Rectangle,
                                              rowIndex As Integer, cellState As DataGridViewElementStates, value As Object, formattedValue As Object,
                                              errorText As String, cellStyle As DataGridViewCellStyle, advancedBorderStyle As DataGridViewAdvancedBorderStyle,
                                              paintParts As DataGridViewPaintParts)
          MyBase.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts)
          If Not (Me.Image Is Nothing) Then
              Dim container As System.Drawing.Drawing2D.GraphicsContainer = graphics.BeginContainer
              graphics.SetClip(cellBounds)
              graphics.DrawImageUnscaled(Me.Image, cellBounds.Location)
              graphics.EndContainer(container)
          End If
      End Sub
      Private ReadOnly Property OwningTextAndImageColumn() As TextAndImageColumn
          Get
              Return TryCast(Me.OwningColumn, TextAndImageColumn)
          End Get
      End Property
  End Class
  </code></pre>
  
  <p>It works very well, except that the image that I use is right at the edges of the cell. I'd like to give it a small margin. How can I do this?</p>