颜色选择器显示颜色名称

时间:2014-04-25 20:27:21

标签: vb.net visual-studio colors

有没有人知道Visual Studio(Visual Basic)的color-picker显示标准颜色的名称?

例如,在Visual Studio中,您可以使用包含color-picker"Custom""Web"标签的"System"来更改控件的颜色。 Web& System选项显示颜色名称列表,而Custom提供(主要)RGB(这是VB ColorPicker控件的功能)。

谢谢!

2 个答案:

答案 0 :(得分:0)

我不了解现有控件,但您可以使用KnownColor枚举和SystemColors类来获取这些Color值的所有名称。然后,您可以构建自己的控件,例如自定义ComboBox,包含该数据。

答案 1 :(得分:0)

除了命名颜色之外你想要像VS一样呈现系统颜色,使它成为弹出窗口或其他类似的东西。使用颜色作为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)

在表单CBO上,将DrawMode设置为OwnerDrawFixed,然后:

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

可以通过定义要填充的矩形来绘制像Windows / VS一样的样本。通常情况下,这会膨胀,但是在你做一些像定义背景颜色的情况下,它更有助于显示它上面的文字和更多的颜色而不是小的样本 - 因此填充的CBO项目矩形。 / p>

标准窗口文本颜色不会显示在所有文本颜色上。对于"灯"主题,紫罗兰和黑色等将隐藏/使颜色名称无法阅读。 GetContrastingColor是一个评估当前颜色亮度的函数,然后返回白色或黑色:

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

然后,您可以在继承自ComboBox的类中使用所有这些,或者构建一个您喜欢不同控件的UserControl。您也可以将其作为代码保存在这些场合调用的DLL中。我应该提到CodeProject上也可能有十几个这样的小动物。