15

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

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

但是,我得到了一套不同的 {Black, Blue}:

在此处输入图像描述

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

4

3 回答 3

23

您需要使用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"))
                                };
于 2012-07-18T17:51:08.783 回答
1

如果你有一组颜色,你可以使用 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;
于 2019-11-30T20:25:48.957 回答
0

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

于 2015-03-09T19:25:58.173 回答