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))