我要讓充滿了所有的顏色System.Drawing.Color
C#讓所有的顏色從顏色
一個ComboBox
但我似乎無法從該集合
我使用已經嘗試收集所有的顏色一個foreach
做的工作是這樣的:
foreach (Color clr in Color)
{
}
但我得到的是一個錯誤。
所以,我怎麼能循環通過所有的顏色?
任何幫助將不勝感激。
我要讓充滿了所有的顏色System.Drawing.Color
C#讓所有的顏色從顏色
一個ComboBox
但我似乎無法從該集合
我使用已經嘗試收集所有的顏色一個foreach
做的工作是這樣的:
foreach (Color clr in Color)
{
}
但我得到的是一個錯誤。
所以,我怎麼能循環通過所有的顏色?
任何幫助將不勝感激。
你可以採取顏色從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);
}
這是我想你想:
foreach (Color color in new ColorConverter().GetStandardValues())
{
MessageBox.Show(color.ToString());
}
它會遍歷所有的顏色標準值,並應該爲你需要的工作
類似於@ madgnome的代碼,但我更喜歡以下內容,因爲它不需要解析字符串名稱(一種冗餘間接,在我看來):
foreach (var colorValue in Enum.GetValues(typeof(KnownColor)))
Color color = Color.FromKnownColor((KnownColor)colorValue);
它缺少「)」在第一線 – Butzke 2015-09-22 17:36:17
@Butzke感謝月底,固定。 – 2015-09-22 17:37:55
我的方式來獲取顏色。我認爲這是通過反射庫的最佳方式。
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;
}
要求是有系統顏色的列表從,的「網絡」顏色的列表,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);
}
}
謝謝!這正是我所需要的。我會落戶只是所有的顏色,然後找到一個方法來過濾它們以避免菜單和桌面的顏色嘍。非常感謝你! – Pieter888 2010-09-29 11:46:20