在ColorDialog中设置CustomColors

时间:2012-07-18 17:38:03

标签: c# colordialog

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

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

但是,我得到的是另一套{Black,Blue}:

enter image description here

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

3 个答案:

答案 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;