Usa los colores de Visual Studio en tu programa

Este ejemplo surgio de una consulta en este artículo.

El control ColorDialog nos presenta una paleta de colores tradicional, pero lo cierto es que la de visual studio es mucho más linda y nos muestra todos los colores por su nombre como están definidos en las propiedades del objeto System.Drawing.Color.

Dado el problema de que no existe un control que nos muestre esta lista de colores vamos a ver como podemos constriur una nosotros mismos.

Para el ejemplo necesitaremos un nuevo proyecto y dos formularios.

En el primer formulario solo tendremos un baton para llamar al formulario 2, tal como se ve en la siguiente figura:

coloresNombre001

y el código del boton es el siguiente:

Private Sub btnColor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnColor.Click
Dim vForm2 As New Form2
vForm2.ShowDialog()
End Sub

y en el siguiente formulario pondremos yn control ListBox y dos botoes (aceptar y cancelar) igual que en el siguiente formulario:

coloresNombre002

En el evento Load del formulario establecemos algunas propiedades del control ListBox y cargamos los nombres de los colores con el siguiente código:

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
ListBox1.DrawMode = DrawMode.OwnerDrawFixed
ListBox1.ItemHeight = 20

ListBox1.Items.Clear()
ListBox1.BeginUpdate()
For Each pi As Reflection.PropertyInfo In GetType(Color).GetProperties(Reflection.BindingFlags.Static Or Reflection.BindingFlags.Public)
ListBox1.Items.Add(pi.Name)
Next
ListBox1.EndUpdate()
End Sub

En la primer linea del Load “ListBox1.DrawMode = DrawMode.OwnerDrawFixed” establecemos que todos los elementos del control se dibujan manualmente y tienen el mismo alto. Esto, ademças, desencadena un suceso DrawItem justo antes de mostrar cada elemento.

Para programar el evento DrawItem del ListBox, seleccionamos (en la vista de diseño) el ListBox1, presionamos F4 para ver las propiedades, y en la parte de arriba del cuadro de propiedades seleccionamos el icono del rayo para ver los evento que el control tiene disponibles, buscamos DrawItem y le damos doble clic. La siguiente imagen ejemplifica como hacerlo:

coloresNombre003

y este es el código del evento DrawItem

Private Sub ListBox1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ListBox1.DrawItem
Dim rectangulo As Rectangle = e.Bounds

If (e.State And DrawItemState.Selected) Then
e.Graphics.FillRectangle(SystemBrushes.Highlight, rectangulo)
Else
e.Graphics.FillRectangle(Brushes.White, rectangulo)
End If

Dim nombreColor As String = ListBox1.Items(e.Index)

Dim b As New SolidBrush(Color.FromName(nombreColor))

rectangulo.Inflate(-16, -2)
e.Graphics.FillRectangle(b, New Rectangle(rectangulo.X, rectangulo.Y, 30, rectangulo.Height))

e.Graphics.DrawRectangle(Pens.Black, New Rectangle(rectangulo.X, rectangulo.Y, 30, rectangulo.Height))

If (e.State And DrawItemState.Selected) Then
e.Graphics.DrawString(nombreColor, e.Font, Brushes.White, rectangulo.X + 34, rectangulo.Y + 2)
Else
e.Graphics.DrawString(nombreColor, e.Font, Brushes.Black, rectangulo.X + 34, rectangulo.Y + 2)
End If
End Sub

Ahora solo nos falta programar los eventosde los dos botones como se ve en el siguiente código:

Private Sub btnAceptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAceptar.Click
My.Forms.Form1.BackColor = Color.FromName(ListBox1.SelectedItem)
End Sub

Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click
Me.Close()
End Sub

Bueno, a probar la aplicación… si todo salió bien, se verá así:

coloresNombre004

Les dejo algunas definiciones:

Graphics.FillRectangle (Método): Rellena el interior de un rectángulo especificado por un par de coordenadas, un valor de ancho y un valor de alto.

Graphics.DrawRectangle (Método):
Dibuja un rectángulo especificado por un par de coordenadas, un valor de ancho y un valor de alto.

Graphics.DrawString (Método): Dibuja la cadena de texto especificada en la ubicación especificada y con los objetos Brush y Font especificados.

Espero que les sirva y lo puedan usar en sus proyectos.



11 Responses to “Usa los colores de Visual Studio en tu programa”

  1. Información Bitacoras.com…

    Valora en Bitacoras.com: Este ejemplo surgio de una consulta en este artículo. El control ColorDialog nos tresenta una paleta de colores tradicional, pero lo ciert es que la de visual studio es mucho más linda y nos muestra todos los colores por su n…..

  2. Cristyan dice:

    Muy bueno el ejemplo, gracias.

  3. José Luis dice:

    ¡¡ GENIAL !!
    ¡¡ Se agradece mucho !!

  4. Oscar Daniel dice:

    !! Muy bueno !!
    lo unico que no me funciono fue el boton cancelar.

  5. Erick dice:

    da error al seleccionar el color transparente, porque sera?……….. el resto de colores si funciona

    salu2

    • Eliseo dice:

      es que el color transparente no se puede aplicar como color de fondo de un formulario, pero si aplica para otros controles.

      Gracias por comentar!

  6. gercer89 dice:

    me salvo la vida este ejemplo!!…pero como hago para que se vean las prpiedades de la pantalla a la cual le cambio el color?porque no me deja ver “My.Forms.Form1.BackColor”.gracias salu2

  7. diego dice:

    hola
    me sale un error se esperaba un identificador exactamente en .<A If (e.State And DrawItemState.Selected) Then
    e.Graphics.FillRectangle(SystemBrushes.Highlight, rectangulo)

    ME AYUDAN POR FA
    GRACIASS

  8. Henry dice:

    Saludos…
    Estoy buscando tecnicas para poder hacer un diseño mas bonito de los controles aquel que ser como el aero pero no tengo idea alguna ni pude encontrar algo por favor si podrian ayudarme con eso de anetmano muchas gracias…

  9. David dice:

    esta padrisimo, muchas gracias por este ejemplo. Podre aplicarlo a mis necesidades

    Gracias desde Merida , Yucatan

Comentar