有没有人知道Visual Studio(Visual Basic)的color-picker
显示标准颜色的名称?
例如,在Visual Studio中,您可以使用包含color-picker
,"Custom"
和"Web"
标签的"System"
来更改控件的颜色。 Web
& System
选项显示颜色名称列表,而Custom
提供(主要)RGB(这是VB ColorPicker控件的功能)。
谢谢!
答案 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上也可能有十几个这样的小动物。