2010-09-29 163 views
19

我要讓充滿了所有的顏色System.Drawing.ColorC#讓所有的顏色從顏色

一個ComboBox但我似乎無法從該集合

我使用已經嘗試收集所有的顏色一個foreach做的工作是這樣的:

foreach (Color clr in Color) 
    { 

    } 

但我得到的是一個錯誤。

所以,我怎麼能循環通過所有的顏色?

任何幫助將不勝感激。

回答

33

你可以採取顏色從KnownColor

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

或使用反射來避免這樣菜單桌面顏色...包含KnowColor

Type colorType = typeof(System.Drawing.Color); 
// We take only static property to avoid properties like Name, IsSystemColor ... 
PropertyInfo[] propInfos = colorType.GetProperties(BindingFlags.Static | BindingFlags.DeclaredOnly | BindingFlags.Public); 
foreach (PropertyInfo propInfo in propInfos) 
{ 
    Console.WriteLine(propInfo.Name); 
} 
+0

謝謝!這正是我所需要的。我會落戶只是所有的顏色,然後找到一個方法來過濾它們以避免菜單和桌面的顏色嘍。非常感謝你! – Pieter888 2010-09-29 11:46:20

3

這是我想你想:

foreach (Color color in new ColorConverter().GetStandardValues()) 
{ 
    MessageBox.Show(color.ToString()); 
} 

它會遍歷所有的顏色標準值,並應該爲你需要的工作

12

類似於@ madgnome的代碼,但我更喜歡以下內容,因爲它不需要解析字符串名稱(一種冗餘間接,在我看來):

foreach (var colorValue in Enum.GetValues(typeof(KnownColor))) 
    Color color = Color.FromKnownColor((KnownColor)colorValue); 
+0

它缺少「)」在第一線 – Butzke 2015-09-22 17:36:17

+0

@Butzke感謝月底,固定。 – 2015-09-22 17:37:55

3

我的方式來獲取顏色。我認爲這是通過反射庫的最佳方式。

private List<Color> GetAllColors() 
{ 
    List<Color> allColors = new List<Color>(); 

    foreach (PropertyInfo property in typeof(Color).GetProperties()) 
    { 
     if (property.PropertyType == typeof(Color)) 
     { 
      allColors.Add((Color)property.GetValue(null)); 
     } 
    } 

    return allColors; 
} 
0

要求是有系統顏色的列表從,的「網絡」顏色的列表,AKA專業顏色選擇,並且然後通過R,G,B的語法RGB,最後爲了完整性使用顏色選擇器控制。

我保存的顏色和系統顏色屬性以備後用列表。 ReduceName(color)從字符串中刪除「Color [Name]」組件。如果您沒有保存顏色的運行列表,則會在第二個列表中顯示兩次。處理這個問題可能有一個更優雅的方法,但時間往往比完美更重要,情況往往如此。

_ListAllColors = new List<Color>(); 
_SystemColorProperties = typeof(SystemColors).GetProperties(); 
foreach (PropertyInfo propertyInfo in _SystemColorProperties) 
{ 
    object colorObject = propertyInfo.GetValue(null, null); 
    Color color = (Color)colorObject; 
    if (!_ListAllColors.Contains(color)) 
    { 
     systemColorsComboBox.Items.Add(ReduceName(color)); 
     _ListAllColors.Add(color); 
    } 
} 

foreach (KnownColor colorValue in Enum.GetValues(typeof(KnownColor))) 
{ 
    Color color = Color.FromKnownColor(colorValue); 

    if (!_ListAllColors.Contains(color)) 
    { 
     professionalColorsComboBox.Items.Add(ReduceName(color)); 
     _ListAllColors.Add(color); 
    } 
} 

System Colors

Professional Colors