2009-07-22 19 views
7

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

[ToolboxBitmap(typeof(ErrorProvider))] 
public class ErrorProviderEx : ErrorProvider { 
... 
} 
+0

बस एफवाईआई: इस प्रकार के नियंत्रण वेब कस्टम कंट्रोल (डब्ल्यूसीसी) हैं, वेब उपयोगकर्ता नियंत्रण (डब्ल्यूयूसी) नहीं। डब्ल्यूयूसी एएसएक्स फाइलें हैं जिनका उपयोग वेब प्रोजेक्ट चौड़ा होता है, डब्ल्यूसीसी का उपयोग मशीन चौड़ा होता है ... इसलिए आपके मामले में आपको अपने प्रश्न में डब्ल्यूसीसी लिखना चाहिए - बस दूसरों को भ्रमित न करें। –

+1

मुझे नहीं पता कि आप किस बारे में बात कर रहे हैं। यह System.Windows.Forms.ErrorProvider है। –

+0

यदि आप बिटमैप के लिए "हार्डकोडेड" पथ प्रदान करते हैं (टूलबॉक्स बिटमैप ("सी: \\ my.bmp") क्या यह अभी भी डिफ़ॉल्ट बिटमैप दिखाता है? –

उत्तर

5

विजुअल स्टूडियो 2008 में, ToolBoxBitmap द्वारा निर्दिष्ट आइकन प्रदर्शन कारणों के वर्तमान समाधान में किसी भी घटक के लिए टूलबॉक्स में नहीं जोड़ा गया है। मानक 'गियर' आइकन का उपयोग किया जाता है। यदि आप टूलबॉक्स के माध्यम से मैन्युअल रूप से अपनी असेंबली जोड़ते हैं ... आइटम जोड़ें ... संवाद, कस्टम आइकन प्रदर्शित करेगा जो आप अनुभव कर रहे हैं। इसके अलावा, जब आप किसी प्रपत्र में ErrorProviderEx खींचते हैं, तो आपके द्वारा निर्दिष्ट आइकन का उपयोग किया जाएगा, जो फिर से एक टिप्पणी में आपके द्वारा नोट किया गया व्यवहार है।

नोट, आपके मामले में, आप typeof(ErrorProvider) का उपयोग कर रहे हैं, इसलिए आपको कस्टम बिटमैप का उपयोग करने की सामान्य समस्याएं नहीं होंगी।

(यह व्यवहार विजुअल स्टूडियो 2005 के लिए भी सच हो सकता है। विजुअल स्टूडियो 2003 ने आइकन प्रदर्शित करके हमें खराब कर दिया।) (मुझे व्यक्तिगत रूप से इस नए व्यवहार को पसंद नहीं है। मैं आईडीई के लिए अतिरिक्त दो या दो प्रतीक्षा करने के लिए तैयार हूं समाधान में सभी नियंत्रणों और घटकों के लिए आइकन पुनर्प्राप्त करने के लिए। मुझे आश्चर्य है कि आइकन दिखाने के लिए कोई रजिस्ट्री हैक है।)

+0

यह अभी भी वीएस 2010 के रूप में वर्तमान व्यवहार है। मुझे पता है कि कोई रजिस्ट्री हैक उभरा नहीं है। –

+0

वीएस 2013 में अभी भी वही है। – peterincumbria

2

क्या यह एक ही प्रोजेक्ट में है? या एक डीएल आप संदर्भित कर रहे हैं?

एक निश्चित डीएलएल को रिफर्न्स करते समय आपको केवल उचित आइकन मिलते हैं। नियंत्रण डीएल बनाने और इसे संदर्भित करने का प्रयास करें।

+0

आह। यह एक ही प्रोजेक्ट में एक ही प्रोजेक्ट में है। तो कोई काम नहीं है? –

1

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

0

यह सुनिश्चित करने का सबसे आसान तरीका है कि एक टूलबार आइकन दिखाई देगा 16x16 बीएमपी फ़ाइल बनाने के लिए, अपने नियंत्रण के प्रोजेक्ट फ़ोल्डर में रखें, फिर इसे एक एम्बेडेड संसाधन के रूप में सेट करें।

चलो अपेक्षाकृत सरल उदाहरण का पालन करें: मान लें कि आपके पास MyCompany.Components.MyControl नामक एक घटक है। एक 16x16 बिटमैप बनाएं जो इसे MyCompany.Components.MyControl प्रोजेक्ट फ़ोल्डर को MyControl.bmp के रूट पर सहेजता है। फिर MyControl.bmp फ़ाइल पर राइट-क्लिक करें और गुण> बिल्ड एक्शन> एम्बेडेड संसाधन चुनें। उस बिंदु पर, आपके पास एक और कदम है: अपनी कक्षा परिभाषा के ऊपर टूलबॉक्स बिटमैप विशेषता जोड़ें (यदि आंशिक कक्षाओं का उपयोग करते हैं, तो मैं नियंत्रण की मुख्य .cs फ़ाइल में विशेषता रखता हूं - Designer.cs फ़ाइल में नहीं)।

  • अपने myControl परियोजना वर्ग के लिए नाम स्थान जहां अपनी परियोजना समाधान में प्रकट होता है के लिए फ़ोल्डर संरचना से मेल खाता है:

    [ToolboxBitmap(typeof(MyControl), "MyControl.bmp")] 
    

    बिल्कुल यकीन है कि हो सकता है: कि ऐसा करने के लिए, इस वाक्य रचना का उपयोग करें।

  • शायद स्पष्ट प्रतीत हो सकता है, लेकिन सुनिश्चित करें कि आपने अपनी बीएमपी फ़ाइल के लिए सही नाम उद्धृत किया है।

जब भी आपका नियंत्रण किसी टूलबॉक्स में जोड़ा जाता है, चाहे वह मैन्युअल रूप से जोड़ा गया हो या प्रोग्रामेटिक रूप से जोड़ा गया हो, तो आपका बिटमैप दिखाई देना चाहिए।

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