Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > как получить список цветов из Color


Автор: Certain 14.10.2008, 13:22
Из KnownColor вытаскивал, но там абсолютно все цвета (и простые, и системные, и  вэб), получилось вытащить все цвета кроме системных... А мне нужны простые (Custom), вобщем весь список цветов, который содержится в Color! Как это сделать?  smile 

Автор: Partizan 14.10.2008, 13:40
Certain, что мешает пробежаться по всему enum-у и получить .ToString() каждого цвета?

Автор: Certain 14.10.2008, 13:57
ничего!  smile Я же объясняю, KnownColor содержит все цвета, мне нужны только custom! Color это struct, а не enum! Если бы было все так легко...

Автор: QryStaL 14.10.2008, 15:01
Объясните, что такое custom цвета? 7 цветов радуги что ли?

Автор: Certain 14.10.2008, 15:21
Например, зайдите в properties формы, свойство BackColor (да любое свойство цвета у контрола).... 3 закладки (custom, web,system)!

Код

string[] colors = Enum.GetNames(typeof(KnownColor));
            foreach (string color in colors)
            {
                if (((Color.FromName(color)).IsSystemColor == false) && ((Color.FromName(color)).Name != Color.Transparent.Name))
                {
                    tsColorFonts.Items.Add(color);
                }
            }

Автор: informatik 14.10.2008, 15:42
Вот тебе весь список этих 48 колоров:

Код

int[] cols = new int[] 
{ 
0xffffff, 0xc0c0ff, 0xc0e0ff, 0xc0ffff, 0xc0ffc0, 0xffffc0, 0xffc0c0, 0xffc0ff, 0xe0e0e0, 0x8080ff, 0x80c0ff, 0x80ffff, 0x80ff80,
0xffff80, 0xff8080, 0xff80ff, 0xc0c0c0, 0xff, 0x80ff, 0xffff, 0xff00, 0xffff00, 0xff0000, 0xff00ff, 0x808080, 0xc0, 0x40c0, 0xc0c0,
0xc000, 0xc0c000, 0xc00000, 0xc000c0, 0x404040, 0x80, 0x4080, 0x8080, 0x8000, 0x808000, 0x800000, 0x800080, 0,
0x40, 0x404080, 0x4040, 0x4000, 0x404000, 0x400000, 0x400040
};



А вот как из них получить массив Color:
Код

Color[] colors = new Color[0x30];
            for (int i = 0; i < cols.Length; i++)
            {
                colors[i] = ColorTranslator.FromOle(cols[i]);
            }

Автор: Certain 14.10.2008, 15:50
 smile  жесть! я по проще способ нашел, не custom конечно, а даже лучше
Спасибо за помощь 

Автор: informatik 14.10.2008, 17:58
Цитата

А мне нужны простые (Custom)

В будущем пишите вопросы правильно...

Цитата

жесть! я по проще способ нашел, не custom конечно, а даже лучше


Я бы неназвал ваш способ лучше....

А так же представленный мной код как раз и выполняется при отображении редактора цветов..

Автор: elbjarn 14.10.2008, 20:48
Цитата(Partizan @  14.10.2008,  13:40 Найти цитируемый пост)
Certain, что мешает пробежаться по всему enum-у и получить .ToString() каждого цвета? 

сорри за оффтоп, но в данном случае лучше применить статический метод класса Enum. GetValues(), по-моему, называется. ему надо передать тип перечисления, и он вернет коллекцию всех возможных значений данного перечисления. 

informatik, просто любопытно: как вы получили эти цвета?)

Автор: informatik 15.10.2008, 06:22
Цитата

informatik, просто любопытно: как вы получили эти цвета?) 


Reflector......

Автор: Certain 15.10.2008, 12:44
Informatik,
в рефлекторе структура Color берёт данные из enum`a KnowColor, а KnowColor расписан вот в таком виде
Код

public enum KnownColor
{
    ActiveBorder = 1,
    ActiveCaption = 2,
    ActiveCaptionText = 3,
    AliceBlue = 0x1c,
    AntiqueWhite = 0x1d,
    AppWorkspace = 4,
    Aqua = 30,
    Aquamarine = 0x1f,
    Azure = 0x20,
    Beige = 0x21,
    Bisque = 0x22,
    Black = 0x23,
    BlanchedAlmond = 0x24,
    Blue = 0x25,
    BlueViolet = 0x26,
    Brown = 0x27,
    BurlyWood = 40,
    ButtonFace = 0xa8,
    ButtonHighlight = 0xa9,
    . . .
}


будте любезны поясните , что здесь к чему? Это биты или что? и как вы получили из этого к примеру вот это 0x400040?

Автор: Partizan 15.10.2008, 12:47
Certain, эээ...вообще говоря у вас там id элемента в enum, а 0х400040 - это уже сам цвет

Автор: Certain 15.10.2008, 13:17
Цитата(informatik @ 15.10.2008,  06:22)
Цитата

informatik, просто любопытно: как вы получили эти цвета?) 


Reflector......

можно по подробнее

Автор: informatik 15.10.2008, 15:58
Цитата

Цитата(informatik @ 15.10.2008,  06:22)
Цитата

informatik, просто любопытно: как вы получили эти цвета?) 


Reflector......

можно по подробнее 


Из вашего первого вопроса:
Цитата

А мне нужны простые (Custom)

я понял что вам нужно только те цвета которые отображаются на вкладке Custom у контрола выбора цвета.

этот контрол - ColorEditor. В нем есть класс ColorPalette, а в нем в свою очередь в конструкторах все ясно.

Кстати говоря есть ведь еще класс ColorDialog, дак вот в нем по всей видимости эти цвета беруться совсем из другого места...  smile 

Автор: Certain 15.10.2008, 17:49
Очень интересно.... спасибо!!!  smile 
Простите, а какая у Вас версия framework?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)