Solved

Visual Basic 2008. color dropdown menu

Posted on 2009-05-06
2
501 Views
Last Modified: 2013-11-27
How do I make a color choosing dropdown just like the color dropdown in properties window?

I don't want the color dialog but a color dropdown.

Thanks!
0
Comment
Question by:NerdsOfTech
2 Comments
 
LVL 85

Accepted Solution

by:
Mike Tomlinson earned 500 total points
ID: 24327970
Here is one version:
Imports System.Reflection

Public Class Form1
 

    Private KnownColors As New List(Of KnownColor)
 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        For Each C As Color In System.ComponentModel.TypeDescriptor.GetConverter(GetType(Color)).GetStandardValues

            If Not C.IsSystemColor Then

                KnownColors.Add(C.ToKnownColor)

            End If

        Next

        ComboBox1.DataSource = KnownColors

        ComboBox1.DrawMode = DrawMode.OwnerDrawFixed

    End Sub
 

    Private Sub ComboBox1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ComboBox1.DrawItem

        Static width As Integer = 15

        e.DrawBackground()

        Dim KC As KnownColor = KnownColors(e.Index)

        Dim rc As New Rectangle(e.Bounds.X + 3, e.Bounds.Y + 3, width, e.Bounds.Height - 6)

        Using B As New SolidBrush(Color.FromKnownColor(KC))

            e.Graphics.FillRectangle(B, rc)

            e.Graphics.DrawRectangle(Pens.Black, rc)

        End Using

        e.Graphics.DrawString(KC.ToString, ComboBox1.Font, Brushes.Black, e.Bounds.X + (width + 6), e.Bounds.Y)

    End Sub
 

    Private Sub ComboBox1_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedValueChanged

        If ComboBox1.SelectedIndex <> -1 Then

            Dim kc As KnownColor = ComboBox1.SelectedValue

            Me.BackColor = Color.FromKnownColor(kc)

        End If

    End Sub
 

End Class

Open in new window

ColorDropDown.jpg
0
 
LVL 19

Author Closing Comment

by:NerdsOfTech
ID: 31578867
Another superb display of knowledge! Thank you Idle_Mind.

I will be asking another related question about this type of control in the future. I will post here to notify you.

=NerdsOfTech
0

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

This article shows a few slightly more advanced techniques for Windows 7 gadget programming, including how to save and restore user settings for your gadget and how to populate the "details" panel that is displayed in the Windows 7 gadget gallery.  …
This article shows how to make a Windows 7 gadget that accepts files dropped from the Windows Explorer.  It also illustrates how to give your gadget a non-rectangular shape and how to add some nifty visual effects to text displayed in a your gadget.…
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…
Here's a very brief overview of the methods PRTG Network Monitor (https://www.paessler.com/prtg) offers for monitoring bandwidth, to help you decide which methods you´d like to investigate in more detail.  The methods are covered in more detail in o…

705 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now