C # Создать экземпляр цвета из любого поддерживаемого формата (свойства Win.Forms -> Цвет) - PullRequest
1 голос
/ 02 июля 2010

Каков наилучший способ создания нового цвета из любого поддерживаемого значения, как, например, «FF00FF11» или «Серый» или «234,255,65»? Мне нужно максимально обобщить эту реализацию, но не могу найти способ сделать это.

С помощью System.Reflaction я могу получить значение для перечислителя KnownColor, но как я могу отличить этот "FF00FF11" от этого "Серого"?

Любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 02 июля 2010

Когда нам нужно было сделать это, мы использовали TypeConverter.Статическая функция, которую я использовал, была:

    private static System.ComponentModel.TypeConverter colorConv = System.ComponentModel.TypeDescriptor.GetConverter(System.Drawing.Color.Red);

    /// <summary>
    /// Parse a string to a Color
    /// </summary>
    /// <param name="txt"></param>
    /// <returns></returns>
    public static System.Drawing.Color ColorFromString(string txt)
    {
        try
        {
            object tmp = colorConv.ConvertFromString(txt);
            return (tmp is System.Drawing.Color) ? (System.Drawing.Color)tmp : System.Drawing.Color.Empty;
        }
        catch 
        {
            // Failed To Parse String
            return System.Drawing.Color.Empty;
        }
    }

Это работает для двух ваших случаев, но не работает в шестнадцатеричном.Вы можете добавить некоторую логику, чтобы попытаться сначала разобрать Hex.

0 голосов
/ 02 июля 2010

Возможно, вы захотите взглянуть на System.Drawing.ColorTranslator.FromHtml(string).

Однако я не уверен, что это поможет вам с вашим последним примером («234,255,65»). Возможно, вам придется сначала попытаться разобрать это (String.Split(), Int32.TryParse(), Color.FromArgb()), а в случае сбоя используйте вышеприведенное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...