C# 在“颜色”对话框中设置自定义颜色

C# 在“颜色”对话框中设置自定义颜色,c#,colordialog,C#,Colordialog,颜色对话框中的自定义颜色设置应使用以下代码设置为{Blue,Blue}: colorDialog1.CustomColors = new int[] { System.Drawing.Color.Blue.ToArgb(), 0xFF0000 }; colorDialog1.ShowDialog(); 但是,我得到的是另一套{黑色,蓝色}: 知道我做错了什么吗?谢谢。您需要使用OLE颜色。实现这一点最简单的方法是使用内置的ColorTranslator对象,例如 colorDialog1.C

颜色对话框中的自定义颜色设置应使用以下代码设置为{Blue,Blue}:

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()。无论如何,这篇文章为我指明了解决问题的正确方向…所以谢谢你和乔治。