Colores personalizados en Button o DataGridView guardado y obtenido de una base de datos

Este aporte es gracias a Alondra

1.- Para todo lo relacionado con los colores hay que importar el sistema de dibujo, por lo que hay que poner esta línea al principio de todo.

Imports System.Drawing

2.- Al presionar un Botón, que aparezca el cuadro de diálogo de los colores y que cambie su color.

Para ello insertar un Button y un ColorDialog al formulario En el ejemplo se muestra como cambiar el color del botón.

Private Sub Button1 _Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'Abre el cuadro de los colores al presionar el botón
        ColorDialog1.Color = Button1.BackColor
        If Me.ColorDialog1.ShowDialog = DialogResult.OK Then
                'Si se presiona Aceptar pasa el color seleccionado como fondo del Button1
                Button1.BackColor = ColorDialog1.Color
        End If
End Sub

3.- Para guardar el color en una base de datos.

'Declarar una variable de tipo string
Dim color1 As String

'Pasar  el color del botón a la variable
color1 = Button1.BackColor.ToString()

'Lo que se guarda en esta variable puede contener lo siguiente:
'Color [Yellow]
'o también
'Color [A=255, R=176, G=255, B=176]
'Con todo (la palabra Color y los corchetes)

'Para sacar la palabra color y el corchete [
color1 = Mid(color1, 8 )
'Me queda:
'Yellow]
'o también
'A=255, R=176, G=255, B=176]

'Para sacar el último corchete
color1 = Replace(color1, "]", "")
'Me queda:
'Yellow
'o también
'A=255, R=176, G=255, B=176

'Y esto es lo que guardo en la base de datos

4.- Para obtener el color de la base de datos y ponerlo al botón.

'Declarar tres variable: una de tipo string que en este ejemplo será botoncolo1 y otras dos de tipo integer que será longitud1 y contador
Dim botoncolo1 As String        'Guarda el color
Dim longitud1, contador As Integer        'Guarda la longitud del color y un contador

'Ejemplo de cómo traerlo de la base de datos

'Los argumentos de conexión a la base de datos
Dim args As String = "Data Source=;" & _
        "Initial Catalog=;Integrated Security=SSPI"

Using connection As SqlConnection = New SqlConnection(args)
        Dim txtConexion As String = "select color from tabla where id = 1"
        adapter = New SqlDataAdapter(txtConexion, connection)
        Try
                dtTabla = New DataTable
                adapter.Fill(dtTabla)
                Dim row As DataRow = dtTabla.Rows(0)
                'Obtengo el campo de la tabla
                Dim value As Object = row.Item("color")
                'Convierto el campo en el tipo de dato que necesito
                botoncolo1 = CStr(value)
        Catch expSQL As SqlException
                MsgBox(expSQL.ToString, MsgBoxStyle.OkOnly, "SQL Exception")
                Exit Sub
        End Try
End Using

'De cualquier forma que se obtenga el valor del color guardado en la base de datos se ingresa en la variable botoncolo1.
'Hay que recordar que traerá:
'Yellow
'o también
'A=255, R=176, G=255, B=176

'Como no sé cuál de los dos casos trae, realizo lo siguiente:
botoncolo1 = Replace(botoncolo1, "A=", "")
botoncolo1 = Replace(botoncolo1, "R=", "")
botoncolo1 = Replace(botoncolo1, "G=", "")
botoncolo1 = Replace(botoncolo1, "B=", "")

'Me queda:
'Yellow
'o también
'255, 176, 255, 176

'Guardo el contenido en un array
Dim c1() = Split(botoncolo1)

'Me queda:
'c1(0) = Yellow
'o también
'c1(0) = 255,
'c1(1) = 176,
'c1(2) = 255,
'c1(3) = 176

'Obtenemos la longitud del array
longitud1 = c1.Length
'La longitud será 1 para el primer caso (Yellow) y 4 para el segundo

'Pasamos el color del array al button
If longitud1 < 2 Then        'Si se trata de Yellow
        Button1.BackColor = Color.FromName(botoncolo1)
        'Habrá ocasiones que no se inserte directamente, entonces colocar:
        Button1.BackColor = Drawing.Color.FromName(botoncolo1)
Else        'Si se trata de 255, 176, 255, 176
        While cc < 4
                'Hay que quitar las comas de cada número guardado en el array
                c1(contador) = Replace(c1(contador), ",", "")
                contador = contador + 1
        End While
       
        Button1.BackColor = Color.FromArgb(c1(0), c1(1), c1(2), c1(3))
        'O prueba con:
        Button1.BackColor = Drawing.Color.FromArgb(c1(0), c1(1), c1(2), c1(3))
End If

5.- El color se lo puede asignar a cualquier cosa, por ejemplo.

'Para colocar el color a la fila del datagridview es de la siguiente manera
DataGridView1.RowTemplate.DefaultCellStyle.BackColor = Color.Blue
'o
DataGridView1.RowTemplate.DefaultCellStyle.BackColor = Drawing.Color.Blue

'Pero también se lo puede asignar con la variable
If longitud1 < 2 Then
        DataGridView1.RowTemplate.DefaultCellStyle.BackColor = Color.FromName(botoncolo1)
Else                       
        While cc < 4
                c1(contador) = Replace(c1(contador), ",", "")
                contador = contador + 1
        End While

        DataGridView1.RowTemplate.DefaultCellStyle.BackColor = Color.FromArgb(c1(0), c1(1), c1(2), c1(3))
End If

'Puede conservar los valores de las variables botoncolo1, longitud1 y del array c1 declarándolos como Private para que las próxima vez solo sea necesario asignarlo así:
If longitud1 < 2 Then
        DataGridView1.RowTemplate.DefaultCellStyle.BackColor = Color.FromName(botoncolo1)
Else
        DataGridView1.RowTemplate.DefaultCellStyle.BackColor = Color.FromArgb(c1(0), c1(1), c1(2), c1(3))
End If

'Si no se quiere trabajar con dos tipos de colores (botoncolo1 y c1(0), c1(1), c1(2), c1(3)), se puede asignar a una variable general
Dim colorGeneral As Color
colorGeneral = Color.FromName(botoncolo1)
'o también
colorGeneral = Color.FromArgb(c1(0), c1(1), c1(2), c1(3))