Here is a bit of code to use for 9-slice scaling. For now, all corners must have the same dimensions, but I hope to change that later on.

Code:
Module Extensions
    <System.CompilerServices.Extension()> _
    Public Sub DrawImage9Scale(ByVal g As Graphics, ByVal img As Image, ByVal dest As Rectangle, ByVal sliceWidth As Integer, ByVal sliceHeight As Integer)
        'Draw upper-left
        g.DrawImage(img, New Rectangle(dest.X, dest.Y, sliceWidth, sliceHeight), New Rectangle(0, 0, sliceWidth, sliceHeight), GraphicsUnit.Pixel)
        'Draw lower-left
        g.DrawImage(img, New Rectangle(dest.X, dest.Bottom - sliceHeight, sliceWidth, sliceHeight), New Rectangle(0, img.Height - sliceHeight, sliceWidth, sliceHeight), GraphicsUnit.Pixel)
        'Draw upper-right
        g.DrawImage(img, New Rectangle(dest.Right - sliceWidth, dest.Y, sliceWidth, sliceHeight), New Rectangle(img.Width - sliceWidth, 0, sliceWidth, sliceHeight), GraphicsUnit.Pixel)
        'Draw lower-right
        g.DrawImage(img, New Rectangle(dest.Right - sliceWidth, dest.Bottom - sliceHeight, sliceWidth, sliceHeight), New Rectangle(img.Width - sliceWidth, img.Height - sliceHeight, sliceWidth, sliceHeight), GraphicsUnit.Pixel)

        'Draw left
        g.DrawImage(img, New Rectangle(dest.X, dest.Y + sliceHeight, sliceWidth, dest.Height - sliceHeight * 2), New Rectangle(0, sliceHeight, sliceWidth, img.Height - sliceHeight * 2), GraphicsUnit.Pixel)
        'Draw right
        g.DrawImage(img, New Rectangle(dest.Right - sliceWidth, dest.Y + sliceHeight, sliceWidth, dest.Height - sliceHeight * 2), New Rectangle(img.Width - sliceWidth, sliceHeight, sliceWidth, img.Height - sliceHeight * 2), GraphicsUnit.Pixel)
        'Draw top
        g.DrawImage(img, New Rectangle(dest.X + sliceWidth, dest.Y, dest.Width - sliceWidth * 2, sliceHeight), New Rectangle(sliceWidth, 0, img.Width - sliceWidth * 2, sliceHeight), GraphicsUnit.Pixel)
        'Draw bottom
        g.DrawImage(img, New Rectangle(dest.X + sliceWidth, dest.Bottom - sliceHeight, dest.Width - sliceWidth * 2, sliceHeight), New Rectangle(sliceWidth, img.Height - sliceHeight, img.Width - sliceWidth * 2, sliceHeight), GraphicsUnit.Pixel)

        'Draw inner
        g.DrawImage(img, New Rectangle(dest.X + sliceWidth, dest.Y + sliceHeight, dest.Width - sliceWidth * 2, dest.Height - sliceHeight * 2), New Rectangle(sliceWidth, sliceHeight, img.Width - sliceWidth * 2, img.Height - sliceHeight * 2), GraphicsUnit.Pixel)
    End Sub
End Module
Put this in any Module block. If you are not using VS 2008 or higher, remove the Extension attribute.