2014-01-16 6 views
-1

Пробовал это сейчас:Как создать список всех цветов из цвета?

KnownColor[] colors = Enum.GetValues(typeof(KnownColor)); 
      foreach (KnownColor knowColor in colors) 
      { 
       Color color = Color.FromKnownColor(knowColor); 
      } 

Но им получить ошибку на Enum.GetValues ​​(TypeOf (KnownColor));

Ошибка 14 Невозможно неявно преобразовать тип 'System.Array' в 'System.Drawing.KnownColor []'. Явное преобразование существует (вы пропускаете листинг?)

В конце концов, я хочу иметь список со всеми цветами внутри, поэтому я могу использовать Список позже с цветами. сегодня я могу сделать Color.Red или Color.Green ... Я хочу, чтобы у меня был список всех цветов в Form1, и я смогу выбрать каждый раз другой цвет, и он изменится на выбранный цвет.

ответ

2

PSWG объяснил, что случилось с существующим кодом, но я бы, вероятно, просто использовать LINQ, чтобы сделать все это на одном дыхании:

var colors = Enum.GetValues(typeof(KnownColor)) 
       .Cast<KnownColor>() // Or cast the array 
       .Select(Color.FromKnownColor) 
       .ToList(); 

Это даст вам List<Color> - на самом деле не совсем понятно, что вы имеете в виду, когда можете выбирать цвета ...

+0

Jon Skeet Я имею в виду, что, например, в моем коде у меня есть эта строка: brush.CenterColor = Color.PaleVioletRed; я не хочу менять каждый раз Цвет, а затем запускать программу, чтобы увидеть, как выглядит цвет, а затем остановить программу изменения цвета снова ... Я хочу, чтобы все цвета, когда я запускаю программу, и когда я выбираю цвет он изменит его на этой строке, чтобы я мог видеть и изменять цвета в реальном времени, когда программа работает. – user3200169

+0

@ user3200169 Если вы просто пытаетесь выбрать каждый цвет в коде, что не так, просто набрав 'PaleVioletRed'? Я не вижу, как это помогает 'for'-loop. –

+0

@ user3200169: Что вы подразумеваете под «когда я выбираю цвет»? В отладчике? Как часть вашего пользовательского интерфейса? Во всяком случае, если вы хотите «Список », это даст вам один ... –

4

Вы должны привести массив:

KnownColor[] colors = (KnownColor[])Enum.GetValues(typeof(KnownColor)); 

В качестве альтернативы, вы можете оставить colors как Array (явно или неявно набран напечатал), так как ваш foreach итератора набран как KnownColor. Это будет работать тоже:

var colors = Enum.GetValues(typeof(KnownColor)); 
foreach (KnownColor knowColor in colors) 
{ 
    Color color = Color.FromKnownColor(knowColor); 
} 
Смежные вопросы