2009-02-23 10 views
9

मैंने अपनी कंपनी के लिए एक सुंदर फैंसी Winforms ऐप बनाया है। हमारे पास एक ग्राफिक डिजाइनर जीयूआई था, जो कि सभी ग्राफिकल बटन, कई स्तरित पृष्ठभूमि और लोगो, एनिमेशन इत्यादि को लागू करने का दर्द था।ग्राफिकल टेम्पलेट एक .NET Winforms एप्लिकेशन

लेकिन अब मेरी कंपनी इसे विभिन्न ब्रांडों के तहत पुनर्विक्रय करना चाहता है। लेकिन चूंकि मैं अधिकतर इसे अच्छी तरह से कोडित करता हूं, मैंने अपने उच्च अप्स को बताया कि मेरे पास एक सप्ताह के भीतर पूरी तरह से पुन: ब्रांडेड संस्करण हो सकता है। असल में मैं बस एक एक्सएमएल सेटिंग्स फ़ाइल में सेटिंग्स का एक गुच्छा बदलता हूं, ग्राफिक्स को नए सेट के साथ स्वैप करता हूं, और बनाता हूं।

समस्या है अगर वे 5 या 6 विभिन्न ब्रांडों चाहते हैं, मैं जहाँ तक 5 अलग अलग समर्थन करने के लिए (मैं वास्तव में अंतर टेम्पलेट्स के साथ, 1 समर्थन किया जाना चाहिए)

समस्या इसकी आसान नहीं है बनाता होगा (मुझे पता है) एक Winforms ऐप में छवियों को स्वैप करने के लिए। मेरे पास एक ही फ़ोल्डर में सभी ग्राफिकल संसाधन हैं, लेकिन एक बार जब प्रत्येक फ़ाइल को संबंधित स्टूडियो में अपनी संबंधित छवि सूची या कंटेनर में दर्ज किया जाता है, तो इसे अपडेट करने का एकमात्र तरीका इसे निकालना और उसे फिर से जोड़ना, स्रोत फ़ोल्डर को बदलना एम्बेडेड छवि रीफ्रेश करने का कारण नहीं है। यह प्रत्येक निर्माण के लिए अविश्वसनीय रूप से कठिन होगा, एक आसान तरीका होना चाहिए।

पर जोड़ें:
तो कुछ आगे की जांच पड़ताल के बाद, मैं resx फ़ाइल संपादक किसी प्रकार का torwards झुकाव रहा हूँ। हालांकि जिन लोगों को मैंने अब तक देखा है, वे विभिन्न भाषाओं में तारों का अनुवाद करने पर अधिक केंद्रित हैं, और या तो बहुत कमजोर हैं, या बिटमैप्स/पीएनजी जैसे बाइनरी संसाधनों को संपादित नहीं कर सकते हैं। यद्यपि यदि आप एक एक्सएमएल व्यूअर में एक रेक्स फ़ाइल खोलते हैं (मैं एक्सएमएल सिटैक्स हाइलाइटिंग का उपयोग करने के लिए .resx सेट के साथ नोटपैड 2 का उपयोग करता हूं) एमएस आपको यह बताने के लिए काफी दयालु है कि प्रत्येक प्रकार का संकलन कैसे किया जाता है (ज्यादातर बेस 64 के बदलाव)

+2

बहुत बुरा आप Winforms कर रहे हैं, यह WPF में केक होगा। –

+0

ऐप को एक साल पहले थोड़ा सा शुरू किया गया था, जो लगभग 4 साल पहले किए गए संस्करण से आयातित बहुत सारे कोड का उपयोग कर रहा था। दुर्भाग्य से मैं इस बार हमारे आसपास WPF पर स्विच नहीं देख रहा हूं। –

उत्तर

12

मुझे लगता है कि आपके लक्ष्य में "ब्रांड योग्य" संसाधन फ़ाइलें होनी चाहिए; आप अनिवार्य रूप से अपने आवेदन को स्थानीयकृत कर रहे हैं, सिवाय इसके कि आपके पास अंग्रेजी के कुछ अलग-अलग संस्करण हैं।

आप बाह्य संसाधन फ़ाइल लोड करने के लिए ResGen.exe और ResourceManager का उपयोग कर सकते हैं, ताकि आप 5 अलग-अलग "संसाधन" फ़ाइलों का उपयोग कर सकें लेकिन अपना कोड आधार समान रखें।

इस पोस्ट में भी मदद मिल सकती ... http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/b388c700-0e07-452b-a19e-ce02775f78a6/

संपादित करें: Btw, मैं दूसरी टिप्पणी है कि आप इस पर प्रयास के एक महान सौदा के माध्यम से जा रहे हैं, WPF पर विचार करेंगे ... अधिकांश उन "ग्राफिकल" तत्वों का संभवतः मूल रूप से किया जा सकता है, खासकर यदि यह ग्रेडियेंट और सामान है, तो आसान टेम्पलेटिंग का उल्लेख न करें।

+0

WPF एक तरफ, मुझे यकीन नहीं है कि यह वही है जो मैं ढूंढ रहा हूं, क्या मुझे अभी भी वैकल्पिक संसाधन फ़ाइल में प्रत्येक छवि को अलग-अलग जोड़ना नहीं होगा? मैं ग्राफिक्स लड़के को किसी फ़ोल्डर में सभी छवियों को संशोधित करना चाहता हूं, फिर उस फ़ोल्डर को इमारत से पहले मेरे वर्तमान के लिए स्वैप करें। –

-2

मुझे लगता है कि आपको फॉर्म के गतिशील रूप से बदलने योग्य क्षेत्रों के लिए उपयोगकर्ता नियंत्रण बनाने के बारे में सोचना चाहिए। रनटाइम पर, आप एक असेंबली को दूसरे के लिए बाहर निकाल सकते हैं।

+0

एक भयानक विचार है। सब कुछ ग्राफिकल है। और मैं एक सिंगल जगह में कोड रखना चाहता हूं। प्रत्येक निर्माण के लिए नई असेंबली बनाना मुझे अब से भी बदतर बना देगा। –

+0

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

0

मैं क्या करूँगा बस एक फ़ोल्डर से शुरू होने पर डिस्क के सभी ग्राफिक्स लोड करें और डिज़ाइनर में ऐसा करने के बजाय उचित रूप से आवश्यक किसी भी इमेजलिस्ट को बनाएं। यदि आप चिंतित हैं कि कोई ग्राफिक्स चुरा लेगा, तो मैं अपने ग्राफिक्स के लिए एक साधारण फ़ाइल प्रारूप (संभवतः एन्क्रिप्टेड) ​​और आपके लिए एक छोटा सा सरल ऐप तैयार करूंगा या डिजाइनर को नियमित रूप से फ़ाइलों से इस प्रारूप में रूपांतरित करने के लिए उपयोग करना होगा। फिर यह अलग-अलग ब्रांडों के बीच इस फ़ोल्डर को स्वैप करने का सिर्फ एक प्रश्न है।

0

यदि आपके अधिकांश फॉर्म समान हैं (यानी एक ही लोगो, नीचे दिए गए बटन, आदि) तो आप WinForms पर visual inheritance का उपयोग कर सकते हैं ताकि "मूल रूप" के सेट को परिभाषित किया जा सके, जिससे आपके वास्तविक रूप प्राप्त होते हैं।

यदि आप अपने प्रत्येक ब्रांड के लिए "बेस फॉर्म" का एक सेट विकसित करते हैं, तो एक अलग असेंबली में प्रत्येक सेट आप एक नए ब्रांड को उत्पन्न करने के लिए आवश्यक काम प्लग-इन कर सकते हैं ताकि बेस फॉर्म का एक नया सेट उत्पन्न हो सके।

आशा है कि यह मदद करता है

0

अब यह बहुत देर हो चुकी है, लेकिन WPF WinForms की तुलना में एक बेहतर विकल्प हो गया होता, क्योंकि यह त्वचा के लिए आसान है।

हालांकि देखें कि DevExpress WinForms के लिए क्या करता है, क्योंकि उनके नियंत्रण में स्किनिंग सिस्टम होता है। मानक Winform नियंत्रण के लिए DevExpress Winform नियंत्रण को स्वैप करना बहुत मुश्किल नहीं है।

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