Este exemplo xurdiu a partir dunha consulta en presente artigo .
O ColorDialog control presenta unha paleta de cores tradicional, pero o certo é que o Visual Studio é moito máis agradable e mostra todas as cores por nome, tal como se definen nas propiedades do obxecto System.Drawing.
Dado o problema de que non hai control para amosar esta lista de cores que vemos como podemos constriur unha de nós mesmos.
Por exemplo, precisamos dun novo proxecto e dúas formas.
Na primeira forma un bastón só tes que chamar o Formulario 2, como se mostra na figura a continuación:

botón e do código é como segue:
BtnColor_Click Private Sub (ByVal Sender As System.Object, ByVal e As System.EventArgs) Handles btnColor.Click As New Form2 Din vForm2 vForm2.ShowDialog () End Sub
e desta forma será n botóns ListBox e dous (aceptar e cancelar) como na forma seguinte:

No caso Load do formulario establecer algunhas propiedades do ListBox e levar os nomes das cores co seguinte código:
Form2_Load Private Sub (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 () Para cada pi Como Reflection.PropertyInfo En GetType (Cor). GetProperties (Ou Reflection.BindingFlags.Public Reflection.BindingFlags.Static) ListBox1.Items.Add (pi.Name) Seguinte ListBox1.EndUpdate () End Sub
Na primeira liña de carga "ListBox1.DrawMode = DrawMode.OwnerDrawFixed" establecer que todos os elementos de control son deseñados a man e teñen a mesma altura. Este ademças, evento DrawItem desencadea un concerto pouco antes de cada elemento.
Para que o evento DrawItem de ListBox, select (en modo deseño), o ListBox1, que prema F4 para ver as propiedades, e na parte superior da caixa de Propiedades, seleccione o raio para ver o evento que o control está dispoñible , nós DrawItem e nós dun dobre clic. A imaxe a continuación ilustra como:

e este é o código de evento DrawItem
ListBox1_DrawItem Private Sub (filtrado e obxecto, ByVal System.Windows.Forms.DrawItemEventArgs) Handles ListBox1.DrawItem Rectángulo Din rectángulo = e.Bounds Se (e.State E DrawItemState.Selected) Logo e.Graphics.FillRectangle (SystemBrushes.Highlight, rectángulo) Outro e.Graphics.FillRectangle (Brushes.White, rectángulo) End If Din cadea = ListBox1.Items nombreColor (e.Index) B Din 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)) Se (e.State E DrawItemState.Selected) Logo e.Graphics.DrawString (nombreColor, e.Font, Brushes.White, rectangulo.X 34, rectangulo.Y + 2) Outro e.Graphics.DrawString (nombreColor, e.Font, Brushes.Black, rectangulo.X 34, rectangulo.Y + 2) End If End Sub
Agora só precisamos de programar os botóns eventosde como se mostra no seguinte código:
BtnAceptar_Click Private Sub (ByVal Sender As System.Object, ByVal e As System.EventArgs) Handles btnAceptar.Click My.Forms.Form1.BackColor = Color.FromName (ListBox1.SelectedItem) End Sub BtnCancelar_Click Private Sub (ByVal Sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click ME.Close () End Sub
Ben, para probar a aplicación ... se todo foi ben, coma este:

Deixo algunhas definicións:
Graphics.FillRectangle (Método): Enche o interior dun rectángulo especificado por un par de coordenadas, unha anchura e unha altura.
Graphics.DrawRectangle (Método): Debuxe un rectángulo especificado por un par de coordenadas, unha anchura e unha altura.
Graphics.DrawString (Método): Debuxe a secuencia de texto especificado no lugar indicado e co especificado Brush e obxectos Font.
Espero que isto axude e pode usar nos seus proxectos.
Información Bitacoras.com ...
Taxa en Bitacoras.com: Este exemplo xurdiu a partir dunha consulta neste artigo. O control ColorDialog tresenta-nos unha paleta de cores tradicional, pero é Tru e que o Visual Studio é moito máis agradable e mostra todas as cores para o seu n .....
Exemplo moi bo, grazas.
GRAN!
É moi apreciado!
! Moi bo!
o único que eu traballei foi o botón de cancelación.
haha, eu esquezo, pero o código é moi simple: ME.Close
falla seleccionar a cor transparente, será? ........... as outras cores funciona
salu2
é que a cor transparente non pode ser aplicado como a cor de fondo dunha forma, pero se é aplicada a outros controis.
Grazas por comentar!
salvou a miña vida este exemplo! ... pero como eu podo ver a pantalla prpiedades no que cambiar a cor? porque permite-me ver "My.Forms.Form1.BackColor." grazas salu2
Ola
Eu recibín un identificador de erro esperada exactamente. <A Se (e.State E DrawItemState. Select ed) A continuación,
e.Graphics.FillRectangle (SystemBrushes.Highlight, rectángulo)
Axuden-me por FA
Graciass
Saúdos ...
Estou na procura de técnicas para facer un mellor deseño dos controis que deben ser como o aeroporto, pero non teño idea nin eu podería atopar algo por favor, se vostede podería me axudar con iso de anetmano moitas grazas ...
este Vera, moitas grazas por este exemplo. Será que vou ser capaz de aplicala la ás miñas necesidades
Grazas a partir de Mérida, Yucatán