определить конкретные пользовательские цвета, которые будут отображаться в colordialog? - PullRequest
3 голосов
/ 06 августа 2009

возможно ли в winforms, vb.net, определить конкретные пользовательские цвета, которые будут отображаться в пользовательских цветовых полях в colordialog?

Ответы [ 4 ]

5 голосов
/ 25 января 2012

Если вы хотите иметь более одного пользовательского цвета, вы можете сделать это:

            '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()
5 голосов
/ 06 августа 2009

Короче да. 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
2 голосов
/ 17 августа 2009

Существующий пример содержит ошибку.

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
0 голосов
/ 10 сентября 2015

SIMPLFIED (по Габби)

Если вы знаете 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...