在ColorDialog中设置自定义颜色

16

以下代码应该将颜色对话框中自定义的颜色设置为{蓝色,蓝色}:

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

但我得到的是不同的一组{黑色,蓝色}:

在这里输入图像描述

您知道我在这里做错了什么吗?谢谢。


1
"0xFF0000" 不是红色吗?虽然可能有误。 - Arash
@Arash,不对,它是蓝色的。0x0000FF 是红色。 - Frédéric Hamidi
@FrédéricHamidi: http://www.nthelp.com/colorcodes.htm (BRG) - Arash
1
@Arash,对话框使用的COLORREF值实际上使用的是BGR而不是RGB,因此存在差异。 - Frédéric Hamidi
3个回答

25

你需要使用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"))
                                };

有趣的是这对你起作用了,Afshin。对我来说,ColorTranslator.ToOle()没有起作用,我不得不使用ColorTranslator.ToWin32()。无论如何,这篇文章指引我朝着正确的方向解决了问题...所以感谢你和George。 - David Carr

1
如果您有一组颜色数组,可以使用Linq进行翻译:
colorDialog1.CustomColors = ThemeColors.Select(x => ColorTranslator.ToOle(x)).ToArray()

主题颜色数组可能是这样的:
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;

0
如果您使用ColorTranslator FromArgb,您可以保持RGB颜色的正确排序。例如,ColorTranslator.ToOle(Color.FromArgb(255, 0, 0))是红色。您还可以使用它来设置没有名称的颜色,例如亮红色ColorTranslator.ToOle(Color.FromArgb(255, 31, 33))。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接