2010-09-29 14 views
19

से सभी रंग हो रही # मैं एक ComboBox से System.Drawing.Colorसी रंग

सभी रंगों से भरा बनाना चाहते लेकिन मुझे लगता है कि संग्रह

मैं पहले से ही उपयोग करने की कोशिश की है से सभी रंगों को इकट्ठा नहीं कर पा रहे एक 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

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

यह पहली पंक्ति के अंत में "12 "गायब है" – Butzke

+0

@ बुट्ज़के धन्यवाद, तय। –

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

आवश्यकता आर, जी, बी वाक्य रचना के माध्यम से आरजीबी से, "वेब" रंग की एक सूची, उर्फ ​​पेशेवर रंग चुना करने के लिए सिस्टम रंग की एक सूची है के लिए गया था, और फिर, और अंत में पूर्णता के लिए रंग पिकर नियंत्रण का उपयोग करें।

मैं बाद में उपयोग के लिए रंगों और सिस्टम रंग गुणों की सूची को सहेजता हूं। ReduceName (रंग) स्ट्रिंग से "रंग [नाम]" घटकों को हटा देता है। यदि आप रंगों की चलती सूची को बनाए नहीं रखते हैं, तो आप उन्हें दूसरी सूची में दो बार दिखाएंगे। संभवत: इसे संभालने के लिए एक और अधिक सुरुचिपूर्ण दृष्टिकोण है, लेकिन अक्सर यह मामला सही से अधिक महत्वपूर्ण था, जैसा अक्सर होता है।

_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

संबंधित मुद्दे