Color-picker Showing Color Names - - Stack Overflow

there is precious little to one of these until you want to do like VS and present System Colors apart from Named Colors, make it a popup or some such. Example using colors as the BackGround:

' capture the names Private _Colors As String() ' get the names ' add qualifiers to skip SystemCOlors or ' Transparent as needed Function GetColorNames As String() For Each colorName As String In KnownColor.GetNames(GetType(KnownColor)) _Colors.Add(colorName) End If Next ' post the names to a CBO: cboBackColor.Items.AddRange(_Colors)

On the form CBO, set the DrawMode to OwnerDrawFixed, then:

Private Sub cboSheetBackColor_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles cboSheetBackColor.DrawItem Dim Bclr As Color, Fclr As Color ' get the colors to use for this item for this Bclr = Color.FromName(_Colors(e.Index).ToString) Fclr = GetContrastingColor(Bclr) ' see below With e.Graphics Using br As New SolidBrush(Bclr) .FillRectangle(br, e.Bounds) End Using Using br As New SolidBrush(Fclr) .DrawString(cboSheetBackColor.Items(e.Index).ToString, cboSheetBackColor.Font, br, e.Bounds.X, e.Bounds.Y) End Using End With e.DrawFocusRectangle() End Sub

You can just draw a swatch like Windows/VS does by defining a rectangle to fill. Generally, thats swell, but in the case where you are doing something like defining a background color it rather helps to show how it looks with text on it and more of the color than the little bitty swatch - hence the filled CBO Item rect.

The standard window Text color will not show up on all of them. For a "light" theme, Violet and Black etc will hide/make the color name impossible to read. GetContrastingColor is a function which evaluates the Brightness of the current color and then returns either White or Black:

Public Function GetContrastingColor(ByVal clrBase As Color) As Color ' Y is the "brightness" Dim Y As Double = (0.299 * clrBase.R) _ + (0.587 * clrBase.G) _ + (0.114 * clrBase.B) If (Y < 140) Then Return Color.White Else Return Color.Black End If End Function

You can then use all this in a Class which inherits from ComboBox, or build a UserControlif you like distinct controls. You can also leave it as code in a DLL which is called on those occasions. I should mention there are also perhaps a dozen such critters on CodeProject.

Từ khóa » Visual Basic Color Name