C# 在“颜色”对话框中设置自定义颜色
颜色对话框中的自定义颜色设置应使用以下代码设置为{Blue,Blue}:C# 在“颜色”对话框中设置自定义颜色,c#,colordialog,C#,Colordialog,颜色对话框中的自定义颜色设置应使用以下代码设置为{Blue,Blue}: colorDialog1.CustomColors = new int[] { System.Drawing.Color.Blue.ToArgb(), 0xFF0000 }; colorDialog1.ShowDialog(); 但是,我得到的是另一套{黑色,蓝色}: 知道我做错了什么吗?谢谢。您需要使用OLE颜色。实现这一点最简单的方法是使用内置的ColorTranslator对象,例如 colorDialog1.C
colorDialog1.CustomColors = new int[] { System.Drawing.Color.Blue.ToArgb(), 0xFF0000 };
colorDialog1.ShowDialog();
但是,我得到的是另一套{黑色,蓝色}:
知道我做错了什么吗?谢谢。您需要使用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"))
};
如果使用argb中的ColorTranslator,则可以保持RGB颜色的正确顺序。例如,ColorTranslator.ToOle(Color.FromArgb(255,0,0))是红色的。您还可以使用它来设置没有名称的颜色,例如,鲜红色ColorTranslator.ToOle(Color.FromArgb(255,31,33)) 如果您有一组颜色,可以使用Linq转换它们:
colorDialog1.CustomColors=ThemeColors.Select(x=>ColorTranslator.ToOle(x)).ToArray()
ThemeColors数组将是这样的:
公共静态颜色[]主题颜色
{
获取=>new[]
{
颜色。来自argb(255,185,0),
颜色。来自argb(231,72,86),
颜色。来自argb(0、120、215),
颜色。来自argb(0,153,188),
彩色达克朗格
}
}
注意:不要忘记添加:
使用System.Linq;
“0xFF0000”不是红色的吗?!也许是错的。@Arash,不,是蓝色的0x0000FF
是红色的。@FrédéricHamidi:(BRG)@Arash,对话框使用的COLORREF
值实际上使用了BGR
而不是RGB
,因此存在差异。有趣的是,这对您很有用。对我来说,ColorTranslator.ToOle()不起作用-我必须使用ColorTranslator.ToWin32()。无论如何,这篇文章为我指明了解决问题的正确方向…所以谢谢你和乔治。