Установка пользовательских цветов в ColorDialog

Пользовательский цвет, заданный в диалоговом окне цвета, должен быть установлен в {Blue, Blue} с использованием следующего кода:

colorDialog1.CustomColors = new int[] { System.Drawing.Color.Blue.ToArgb(), 0xFF0000 };
colorDialog1.ShowDialog();

Но я получаю другой набор {черный, синий}:

Есть идеи, что я здесь делаю не так? Благодарю.

2 ответа

Решение

Вам нужно использовать OLE цвета. Самый простой способ добиться этого - использовать встроенный ColorTranslator объект, например

colorDialog1.CustomColors = new int[] { 
                                        ColorTranslator.ToOle(Color.Blue), 
                                        ColorTranslator.ToOle(Color.Red)
                                      };
colorDialog1.ShowDialog(); 

Если вам нужно конвертировать из цветов HTML, вы также можете использовать ColorTranslator.FromHtml метод, например

colorDialog1.CustomColors = new int[]
                                {
                                    ColorTranslator.ToOle(Color.Blue), 
                                    ColorTranslator.ToOle(ColorTranslator.FromHtml("#FF0000"))
                                };

Если у вас есть массив цветов, вы можете перевести их с помощью Linq:

colorDialog1.CustomColors = ThemeColors.Select(x => ColorTranslator.ToOle(x)).ToArray()

Массив ThemeColors будет примерно таким:

public static Color[] ThemeColors
{
   get => new[]
   {
      Color.FromArgb(255, 185, 0),
      Color.FromArgb(231, 72, 86),
      Color.FromArgb(0, 120, 215),
      Color.FromArgb(0, 153, 188),
      Color.DarkOrange
   }
}

Примечание: не забудьте добавить:

using System.Linq;

Если вы используете ColorTranslator FromArgb, вы можете сохранить цвета RGB в правильном порядке. Например, ColorTranslator.ToOle(Color.FromArgb(255, 0, 0)), красный. Вы также можете использовать это для установки цветов, которые не имеют названия, например, ярко-красный ColorTranslator.ToOle(Color.FromArgb(255, 31, 33)),.

Другие вопросы по тегам