颜色对话框中的自定义颜色设置应使用以下代码设置为{Blue,Blue}:
colorDialog1.CustomColors = new int[] { System.Drawing.Color.Blue.ToArgb(), 0xFF0000 };
colorDialog1.ShowDialog();
但是,我得到的是另一套{Black,Blue}:
知道我在这里做错了什么?感谢。
答案 0 :(得分:22)
您需要使用 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"))
};
答案 1 :(得分:0)
如果使用ColorTranslator FromArgb,则可以保持RGB颜色的正确顺序。例如,ColorTranslator.ToOle(Color.FromArgb(255,0,0))为红色。您也可以使用它来设置不具有名称的颜色,例如,亮红色ColorTranslator.ToOle(Color.FromArgb(255,31,33))。
答案 2 :(得分:0)
如果您有多种颜色,则可以使用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;