Настройка CustomColors в ColorDialog

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

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

Но я получаю другой набор {Black, Blue}:

enter image description here

Любая идея Что я здесь делаю неправильно? Спасибо.

Ответ 1

Вам нужно использовать цвета 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"))
                                };

Ответ 2

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