Возможно ли в winforms, vb.net, определить конкретные настраиваемые цвета, которые будут отображаться в полях настраиваемых цветов в colordialog?
4 ответа
Короче да. MSDN покрывает это здесь. Проблема в том, что это не делается через Color
- вам нужно обрабатывать значение, которое задает BGR - то есть каждое целое число состоит из цветов как 00BBGGRR, поэтому вы сдвигаете влево синий цвет на 16, зеленый на 8, и используйте красный "как есть".
Мой VB отстой, но на C # добавить фиолетовый:
using (ColorDialog dlg = new ColorDialog())
{
Color purple = Color.Purple;
int i = (purple.B << 16) | (purple.G << 8) | purple.R;
dlg.CustomColors = new[] { i };
dlg.ShowDialog();
}
Отражатель уверяет меня, что это похоже на:
Using dlg As ColorDialog = New ColorDialog
Dim purple As Color = Color.Purple
Dim i As Integer = (((purple.B << &H10) Or (purple.G << 8)) Or purple.R)
dlg.CustomColors = New Integer() { i }
dlg.ShowDialog
End Using
УПРОЩЕННЫЙ (на основе Габби)
Если вы знаете ARGB ваших целевых пользовательских цветов, используйте:
' Define custom colors
ColorDialog1.CustomColors = New Integer() {(255 << 16 Or 255 << 8 Or 0), _
(220 << 16 Or 104 << 8 Or 230), _
(255 << 16 Or 214 << 8 Or 177)}
ColorDialog1.ShowDialog()
'where colors are (arbg) 1: 0,255,255 [aqua]
' 2: 230,104,220 [bright pink]
' 3: 177,214,255 [whatever]
Существующий пример содержит ошибку.
Purple.B - это байт, а не целое число, поэтому его сдвиг на 8 или 16 бит не повлияет на значение. Каждый байт сначала должен быть приведен к целому числу, прежде чем сдвигать его. Примерно так (VB.NET):
Dim CurrentColor As Color = Color.Purple
Using dlg As ColorDialog = New ColorDialog
Dim colourBlue As Integer = CurrentColor.B
Dim colourGreen As Integer = CurrentColor.G
Dim colourRed As Integer = CurrentColor.R
Dim newCustomColour as Integer = colourBlue << 16 Or colourGreen << 8 Or colourRed
dlg.CustomColors = New Integer() { newCustomColour }
dlg.ShowDialog
End Using
Если вы хотите иметь более одного собственного цвета, вы можете сделать это:
'Define custom colors
Dim cMyCustomColors(1) As Color
cMyCustomColors(0) = Color.FromArgb(0, 255, 255) 'aqua
cMyCustomColors(1) = Color.FromArgb(230, 104, 220) 'bright pink
'Convert colors to integers
Dim colorBlue As Integer
Dim colorGreen As Integer
Dim colorRed As Integer
Dim iMyCustomColor As Integer
Dim iMyCustomColors(cMyCustomColors.Length - 1) As Integer
For index = 0 To cMyCustomColors.Length - 1
'cast to integer
colorBlue = cMyCustomColors(index).B
colorGreen = cMyCustomColors(index).G
colorRed = cMyCustomColors(index).R
'shift the bits
iMyCustomColor = colorBlue << 16 Or colorGreen << 8 Or colorRed
iMyCustomColors(index) = iMyCustomColor
Next
ColorDialog1.CustomColors = iMyCustomColors
ColorDialog1.ShowDialog()
Похожие вопросы
Новые вопросы
vb.net
Visual Basic.NET (VB.NET) - это мультипарадигмальный, управляемый, типобезопасный, объектно-ориентированный язык компьютерного программирования. Наряду с C # и F # это один из основных языков, нацеленных на .NET Framework. VB.NET можно рассматривать как эволюцию Microsoft Visual Basic 6 (VB6), но реализованную в Microsoft .NET Framework. НЕ ИСПОЛЬЗУЙТЕ этот тег для вопросов VB6, VBA или VBScript.