2009-06-21 11 views
6

मैं एक 'समस्या' में आया हूं जो मुझे लगता है कि काफी आम होना चाहिए और सोच सकता है कि कोई मदद कर सकता है।मैं विंडो फॉर्म एप्लिकेशन में रंगों के लिए गणना कैसे बना सकता हूं?

मैं काम पर उपयोग करने के लिए एक दोस्त के लिए एक साधारण विंडोज़ फॉर्म (वीबीएनईटी का उपयोग कर) बना रहा हूं। उनकी कंपनी के पास लगभग 10 विशिष्ट रंग योजनाएं हैं (उनमें आरजीबी मूल्यों की सूची है) जो वे कंपनी लोगो, वेबसाइट इत्यादि के लिए उपयोग करते हैं।

मैं अपने आवेदन में इस रंग योजना का पालन करना चाहता हूं और विकास को सरल बनाना चाहता हूं, इन रंगों के एक गणन निर्माण मुश्किल हर लेबल के लिए आरबीजी मूल्य कोडिंग से बचने के लिए, पैनल आदि

मेरे प्रारंभिक सोचा निम्न करने के लिए किया गया था:

Enum ColorTypes 
    CompanyDarkBlue = Color.FromArgB(0,56,147) 
    CompanyBlue = Color.FromArgB(0,111,198) 
    CompanyLightBlue = Color.FromArgB(0,145,201) 
End Enum 

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

आपको इस समस्या को हल करने का सबसे अच्छा तरीका क्या है?

धन्यवाद बहुत

उत्तर

0

आप साझा क्षेत्रों/गुणों के साथ एक कक्षा में एक ही जानकारी को संगृहीत और एक गणन के साथ के रूप में एक ही प्रभाव पहुँच सकते हैं।

न बिंदु क्यों एक गणन सभी

3

आप एक विस्तार विधि का उपयोग कर सकते हैं पर यहाँ की जरूरत है देखते हैं। सबसे पहले अपने enum को आसान बनाने: C#: Enhance Enums using Extension Methods पर एक नज़र डालें

ColorType.CompanyDarkBlue.ToColor(); 

अधिक जानकारी के लिए:

public static class ColorTypeExtensions 
{ 
    public static Color ToColor(this ColorType colorType) 
    { 
     switch(colorType) 
     { 
     case ColorType.CompanyDarkBlue: return Color.FromArgB(0,56,147); 
     ... 
     } 
    } 
} 

यह आपको लिखने के लिए अनुमति देगा:

enum ColorType 
{ 
    CompanyDarkBlue, 
    CompanyBlue, 
    CompanyLightBlue 
} 

विस्तार विधि कुछ इस तरह दिखेगा

2

इन रंगों को अलग वर्ग में रखें और उन्हें गुणों के रूप में रखें गणना से।

public class myColor 
{ 
    public static Color CompanyDarkBlue 
    { 
     get { return Color.FromArgb(0, 56, 147); } 
    } 

    public static Color CompanyBlue 
    { 
     get { return Color.FromArgb(0, 111, 198); } 
    } 

    public static Color CompanyLightBlue 
    { 
     get { return Color.FromArgb(0, 145, 201); } 
    } 
} 
+0

वाहिद - धन्यवाद। मैंने इसका इस्तेमाल किया और ठीक काम किया। सहायता करने के लिए समय निकालने के लिए धन्यवाद। –

3

मैं नहीं कहूंगा कि आपको यहां एक गणना की आवश्यकता है। जब आपने "रंग योजना" का उल्लेख किया है, तो इसे करने का सामान्य तरीका विभिन्न रंग योजनाओं की अनुमति देने के लिए बहुरूपता का उपयोग करना है।

इसका मतलब है कि आप इस तरह से अपने इंटरफेस होगा:

public interface IColorScheme 
    { 
     Color CompanyDarkBlue { get; } 
     Color CompanyBlue { get; } 
     Color CompanyLightBlue { get; } 
    } 

और उसके बाद किसी भी तरह से इसे लागू आप इसे पसंद:

public class MyColorScheme : IColorScheme 
    { 
     public virtual Color CompanyDarkBlue 
     { 
      get { return Color.FromArgB(0,56,147); } 
     } 

     public virtual Color CompanyBlue 
     { 
      get { return Color.FromArgB(0,56,147); } 
     } 

     // etc. 
    } 

ध्यान दें कि मैं भी इन गुणों आभासी बना दिया है, तो यदि आपको थोड़ा अलग योजना की आवश्यकता है तो आप आसानी से केवल विशिष्ट रंगों को ओवरराइड कर सकते हैं।

इस अमूर्तता का अधिक से अधिक उपयोग करने के लिए, आपके कार्यक्रम को वास्तविक कार्यान्वयन के बारे में जागरूक किए बिना, ज्यादातर आईसीओलोरशेम गुणों का उपयोग करना चाहिए। शुरुआती रंग के दौरान उचित रंग योजना को अलग से तत्काल किया जाना चाहिए।

+0

ग्रू - उत्तर के लिए धन्यवाद। मैंने वाहिब से कोड का उपयोग किया (नीचे देखें)। जैसा भी होता है, 'इंटरफेस' मैं जिस पुस्तक को पढ़ रहा हूं, उसका अगला अध्याय है और अभी तक उनसे परिचित नहीं हूं। एक बार जब मैं उनके चारों ओर अपना सिर प्राप्त कर लेता हूं तो मैं सीखने के अभ्यास के रूप में आपके सुझाव का प्रयास करूंगा –

+0

अच्छा, चलते रहो! जब आप उस बिंदु पर पहुंचते हैं, तो मैं एक अभ्यास की सिफारिश करता हूं: एक ऐप बनाने का प्रयास करें जो उपयोगकर्ता सेटिंग्स के आधार पर पूरी रंग योजना को बदल देगा, और फिर देखें कि इंटरफेस आपको ऐसा करने में कैसे मदद कर सकता है। – Groo

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

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