Dit voorbeeld is ontstaan uit een vraag in dit artikel .
De controle ColorDialog presenteert een traditioneel kleurenpalet, maar de waarheid is dat Visual Studio is veel mooier en toont alle kleuren bij naam zoals gedefinieerd in de System.Drawing object eigenschappen.
Gezien het probleem dat er geen controle om ons deze lijst van kleuren die we zien hoe we constriur een onszelf.
Zo hebben we een nieuw project en twee vormen.
In de eerste vormen een stokje hoeft alleen de Form 2 noemen, zoals in de volgende afbeelding:

knop en de code is als volgt:
BtnColor_Click Private Sub (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnColor.Click Als Nieuw Form2 Dim vForm2 vForm2.ShowDialog () End Sub
en in deze vorm zal n botoes keuzelijst en twee (accepteren en annuleren) als in de volgende vorm:

In Load van het formulier bij te stellen een aantal eigenschappen van de ListBox en dragen de namen van de kleuren met de volgende code:
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 () Voor elke PI als Reflection.PropertyInfo In gettype (Color). GetProperties (of Reflection.BindingFlags.Static Reflection.BindingFlags.Public) ListBox1.Items.Add (pi.Name) Volgende ListBox1.EndUpdate () End Sub
In de eerste regel van Load "ListBox1.DrawMode = DrawMode.OwnerDrawFixed" vast te stellen dat alle elementen van controle handmatig worden getrokken en hebben dezelfde hoogte. Dit ademças, DrawItem gebeurtenis veroorzaakt een show vlak voor elk item.
Om de DrawItem geval van ListBox, selecteert u (in de ontwerpweergave) de ListBox1 te stellen, we druk op F4 om de eigenschappen te bekijken, en de bovenkant van het vak Eigenschappen selecteert u de bliksemschicht aan het evenement dat de controle beschikbaar is te zien , we DrawItem en we dubbelklikken. De volgende afbeelding laat zien hoe:

en dit is de code van DrawItem evenement
ListBox1_DrawItem Private Sub (ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ListBox1.DrawItem Dim rechthoek als rechthoek = e.Bounds Als (e.State En DrawItemState.Selected) Dan e.Graphics.FillRectangle (SystemBrushes.Highlight, rechthoek) Anders e.Graphics.FillRectangle (Brushes.White, rechthoek) End If Dim As String = ListBox1.Items nombreColor (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)) Als (e.State En DrawItemState.Selected) Dan e.Graphics.DrawString (nombreColor, e.Font, Brushes.White, rectangulo.X + 34, rectangulo.Y + 2) Anders e.Graphics.DrawString (nombreColor, e.Font, Brushes.Black, rectangulo.X + 34, rectangulo.Y + 2) End If End Sub
Nu hoeven we alleen maar naar de knoppen te programmeren eventosde zoals weergegeven in de volgende code:
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
Nou, om de toepassing te testen ... als alles goed ging, ziet er als volgt uit:

Ik laat een aantal definities:
Graphics.FillRectangle (methode) vult het binnenste van een rechthoek die door een paar coördinaten, een breedte en hoogte.
Graphics.DrawRectangle (methode): Een rechthoek die door een paar coördinaten, een breedte en hoogte.
Graphics.DrawString (Methode): Teken de opgegeven tekenreeks op de opgegeven locatie en met de opgegeven Brush en Font objecten.
Hoop dat dit helpt en u kunt gebruiken in uw projecten.
Informatie Bitacoras.com ...
Prijs in Bitacoras.com: Dit voorbeeld is ontstaan uit een query in dit artikel. De controle ColorDialog tresenta ons een traditionele kleurenpalet, maar het is tru e die van Visual Studio is veel mooier en toont alle kleuren voor uw n .....
Zeer goed voorbeeld, dank je.
GREAT!
Wordt zeer gewaardeerd!
! Heel goed!
het enige dat ik werkte was de knop Annuleren.
haha, ik ben vergeten, maar de code is heel eenvoudig: Me.Close
niet in slaagt het selecteren van de transparante kleur, zal het zijn? ........... de andere kleuren als werkt
salu2
dat de transparante kleur niet kan worden toegepast als de achtergrondkleur van vorm, maar indien toegepast op andere bedieningsorganen.
Bedankt voor het commentaar!
heeft mijn leven gered dit voorbeeld! ... maar als ik naar de prpiedades scherm waar je de kleur te zien?, omdat het laat me zien "My.Forms.Form1.BackColor." dankzij salu2
hallo
Ik krijg een foutmelding verwacht identificatie precies. <A Als (e.State En DrawItemState. Select , red.) Dan
e.Graphics.FillRectangle (SystemBrushes.Highlight, rechthoek)
HELP ME DOOR FA
Graciass
Groeten ...
Ik ben op zoek naar technieken om een mooier ontwerp van de controles die moeten zijn als het vliegveld te maken, maar ik heb geen idee of kan ik iets vinden kunt u als u mij zou kunnen helpen met die van anetmano hartelijk dank ...
deze VERA, heel erg bedankt voor dit voorbeeld. Zal ik in staat zijn om het toe te passen om aan mijn behoeften
Dank u van Merida, Yucatan