Установка пользовательских цветов в 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)),.