पूर्ण कस्टम घटकों का निर्माण एक बहुत ही उन्नत परियोजना हो सकती है। लेकिन आप एक VB.NET वर्ग बना सकते हैं जिसमें बहुत कम प्रयास के साथ टूलबॉक्स घटक के कई फायदे हैं। ऐसे!
एक पूर्ण कस्टम घटक बनाने के लिए आपको जो करने की आवश्यकता है उसका स्वाद पाने के लिए, इस प्रयोग को आज़माएँ:
-> VB.NET में एक नया विंडोज एप्लीकेशन प्रोजेक्ट खोलें।
-> टूलबॉक्स से चेकबॉक्स को फॉर्म में जोड़ें।
-> के शीर्ष पर "सभी फाइलें दिखाएं" बटन पर क्लिक करें समाधान खोजी.
यह उन फ़ाइलों को प्रदर्शित करेगा जो विज़ुअल स्टूडियो आपकी परियोजना के लिए बनाता है (इसलिए आपको नहीं करना है)। एक ऐतिहासिक फुटनोट के रूप में, VB6 कंपाइलर ने बहुत कुछ किया, लेकिन आप कभी भी कोड को एक्सेस नहीं कर सके क्योंकि इसे "पी-कोड" संकलित किया गया था। आप VB6 में भी कस्टम नियंत्रण विकसित कर सकते हैं, लेकिन यह बहुत अधिक कठिन था और एक विशेष उपयोगिता की आवश्यकता थी जो Microsoft ने केवल उस उद्देश्य के लिए आपूर्ति की थी।
फार्म में Designer.vb फ़ाइल, आप पाएंगे कि नीचे दिए गए कोड को चेकबॉक्स घटक का समर्थन करने के लिए सही स्थानों में स्वचालित रूप से जोड़ा गया है। (यदि आपके पास Visual Studio का कोई भिन्न संस्करण है, तो आपका कोड थोड़ा भिन्न हो सकता है।) यह वह कोड है जो Visual Studio आपके लिए लिखता है।
'विंडोज फॉर्म डिजाइनर प्राइवेट घटकों द्वारा आवश्यक _ सिस्टम के रूप में। ComponentModel। IContainer'NOTE: निम्न प्रक्रिया की आवश्यकता होती है। इसके बाद विंडोज फॉर्म डिजाइनर का उपयोग किया जा सकता है। इसे विंडोज फॉर्म डिजाइनर का उपयोग करके संशोधित किया जा सकता है। कोड संपादक का उपयोग करके इसे संशोधित न करें।_प्यार उप उपप्रकार.कॉम () मुझे। चेकबॉक्स 1 = नई प्रणाली। खिड़कियाँ। फार्म। चेकबॉक्स () मुझे। सस्पेंडलाइयूट () '' चेकबॉक्स 1 ''। CheckBox1.AutoSize = True Me। CheckBox1.Location = नई प्रणाली। चित्रकारी। बिंदु (29, 28) मुझे। CheckBox1.Name = "चेकबॉक्स 1" ।।. इत्यादि ...
यह वह कोड है जिसे आपको कस्टम कंट्रोल बनाने के लिए अपने प्रोग्राम में जोड़ना होगा। ध्यान रखें कि वास्तविक चेकबॉक्स नियंत्रण के सभी तरीके और गुण .NET फ्रेमवर्क द्वारा आपूर्ति की गई कक्षा में हैं: प्रणाली। खिड़कियाँ। फार्म। चेक बॉक्स. यह आपकी परियोजना का हिस्सा नहीं है क्योंकि यह सभी .NET प्रोग्राम के लिए विंडोज में स्थापित है। लेकिन वहाँ एक है बहुत इसका।
एक अन्य बिंदु यह है कि यदि आप उपयोग कर रहे हैं तो जागरूक होना चाहिए WPF (विंडोज प्रेजेंटेशन फाउंडेशन), .NET चेकबॉक्स क्लास नाम की एक पूरी तरह से अलग लाइब्रेरी से आता है प्रणाली। खिड़कियाँ। नियंत्रण. यह आलेख केवल एक Windows प्रपत्र अनुप्रयोग के लिए काम करता है, लेकिन यहाँ के प्रिंसिपल किसी भी VB.NET प्रोजेक्ट के लिए काम करते हैं।
मान लीजिए कि आपकी परियोजना को एक नियंत्रण की आवश्यकता है जो मानक नियंत्रणों में से एक की तरह है। उदाहरण के लिए, एक चेकबॉक्स जिसने रंग बदल दिया, या छोटे "खुश" चेहरे को "चेक" ग्राफिक प्रदर्शित करने के बजाय प्रदर्शित किया। हम एक वर्ग बनाने जा रहे हैं जो ऐसा करता है और आपको दिखाता है कि इसे अपनी परियोजना में कैसे जोड़ा जाए। हालांकि यह अपने आप उपयोगी हो सकता है, वास्तविक लक्ष्य VB.NET का प्रदर्शन करना है विरासत.
चलो शुरू करें कोडिंग
आरंभ करने के लिए, आपके द्वारा अभी जोड़े गए चेकबॉक्स का नाम बदलें oldCheckBox. (आप समाधान एक्सप्लोरर को सरल बनाने के लिए "सभी फ़ाइलें दिखाएं" को फिर से प्रदर्शित करना बंद कर सकते हैं।) अब अपनी परियोजना में एक नया वर्ग जोड़ें। समाधान एक्सप्लोरर में प्रोजेक्ट को राइट-क्लिक करने और प्रोजेक्ट मेनू आइटम के तहत "एड" का चयन करने और फिर "क्लास जोड़ें" का चयन करने सहित कई तरीके हैं। नई कक्षा का फ़ाइल नाम बदलें newCheckBox चीजों को सीधा रखने के लिए। अंत में, क्लास के लिए कोड विंडो खोलें और इस कोड को जोड़ें:
सार्वजनिक वर्ग newCheckBox Inherits चेकबॉक्स निजी CenterSquareColor रंग = रंग के रूप में। रेड प्रोटेक्टेड ओवरराइड्स सब ऑनपेंट (ByVal pEvent _ As PaintEventArgs) Dim CenterSquare _ न्यू रेक्टेंगल (3, 4, 10, 12) MyBase के रूप में। OnPaint (pEvent) यदि मुझे। चेक किया फिर पेवेंट किया। ग्राफिक्स। फिलरक्टैंगल (न्यू सॉलिडब्रश (सेंटरस्क्वेयरकोलर), सेंटरस्क्वेयर) यदि एंड सब-एंड क्लास
(इस लेख में और साइट पर दूसरों में, लाइनों को कम रखने के लिए बहुत सी लाइन का उपयोग किया जाता है ताकि वे वेब पेज पर उपलब्ध स्थान में फिट हो जाएं।)
आपके नए वर्ग कोड के बारे में नोटिस करने वाली पहली चीज़ है विरासत में मिली कीवर्ड। इसका मतलब है कि VB.NET फ्रेमवर्क चेकबॉक्स के सभी गुण और तरीके स्वतः ही इस का हिस्सा हैं। यह बचाने के लिए कि यह कितना काम करता है, इसकी सराहना करने के लिए, आपको खरोंच से चेकबॉक्स घटक की तरह कुछ प्रोग्रामिंग की कोशिश करनी होगी।
उपरोक्त कोड में ध्यान देने योग्य दो प्रमुख बातें हैं:
पहला कोड उपयोग है अवहेलना मानक .NET व्यवहार को बदलने के लिए जो एक के लिए होता है OnPaint प्रतिस्पर्धा। जब भी विंडोज आपके नोटिस का हिस्सा पुनर्निर्मित किया जाना है नोटिस पर एक चालू घटना शुरू हो जाती है। एक उदाहरण तब होगा जब कोई अन्य विंडो आपके प्रदर्शन का हिस्सा खोलती है। विंडोज स्वचालित रूप से डिस्प्ले को अपडेट करता है, लेकिन फिर आपके कोड में ऑनपेंट इवेंट को कॉल करता है। (ऑनपैंट ईवेंट को तब भी कहा जाता है जब फॉर्म शुरू में बनाया जाता है।) इसलिए यदि हम ऑनपेंट को ओवरराइड करते हैं, तो हम स्क्रीन पर चीजों को देखने के तरीके को बदल सकते हैं।
दूसरा तरीका है Visual Basic चेकबॉक्स बनाता है। जब भी अभिभावक "चेक किया गया" (वह है, मेरे। चेक किए गए है सच) फिर हम अपने NewCheckBox वर्ग में जो नया कोड प्रदान करते हैं, वह चेकमार्क ड्राइंग के बजाय चेकबॉक्स के केंद्र में फिर से आ जाएगा।
बाकी जो कहा जाता है GDI + कोड. यह कोड एक आयत को चेक बॉक्स के केंद्र के समान आकार का चयन करता है और इसे GDI + मेथड कॉल के साथ रंग देता है। लाल आयत, "आयत (3, 4, 10, 12)" की स्थिति के लिए "मैजिक नंबर" प्रयोगात्मक रूप से निर्धारित किए गए थे। मैंने इसे तब तक बदला जब तक यह सही नहीं लगा।
एक बहुत ही महत्वपूर्ण कदम है जिसे आप सुनिश्चित करना चाहते हैं कि आप ओवरराइड प्रक्रियाओं से बाहर न निकलें:
MyBase। ऑनपेंट (पेवेंट)
ओवरराइड का मतलब है कि आपका कोड प्रदान करेगा सब घटना के लिए कोड की। लेकिन यह शायद ही कभी आप चाहते हैं। तो VB सामान्य .NET कोड को चलाने का एक तरीका प्रदान करता है जिसे किसी ईवेंट के लिए निष्पादित किया गया होगा। यह वह कथन है जो ऐसा करता है। यह बहुत ही पैरामीटर से गुजरता है - इवेंट कोड के लिए पीईवेंट - जिसे निष्पादित नहीं किया गया होता, अगर यह ओवरराइड नहीं होता, MyBase। OnPaint।
नए नियंत्रण का उपयोग करना
क्योंकि हमारा नया नियंत्रण हमारे टूलबॉक्स में नहीं है, इसे कोड के साथ फॉर्म में बनाना होगा। ऐसा करने के लिए सबसे अच्छी जगह है भार घटना की प्रक्रिया।
फॉर्म लोड इवेंट प्रक्रिया के लिए कोड विंडो खोलें और इस कोड को जोड़ें:
निजी उप frmCustCtrlEx_Load (सिस्टम द्वारा ByVal प्रेषक। ऑब्जेक्ट, बायवाल ई अस सिस्टम। EventArgs) हैंडल मायबेस। नई newCheckBox के रूप में डिम CustomCheckBox लोड करें () customCheckBox के साथ ।Text = "कस्टम चेकबॉक्स" ।Left = oldCheckBox। वाम .Top = oldCheckBox। शीर्ष + पुराना चेकबॉक्स। ऊँचाई। आकार = नया आकार (पुराने चेकबॉक्स)। आकार। चौड़ाई + 50, पुराना चेकबॉक्स। आकार। ऊंचाई) नियंत्रण के साथ समाप्त। जोड़ें (customCheckBox) उप उप
नए चेकबॉक्स को फॉर्म पर रखने के लिए, हमने इस तथ्य का लाभ उठाया है कि वहां पहले से ही एक है और बस उस एक के आकार और स्थिति का उपयोग किया है (समायोजित ताकि पाठ संपत्ति फिट हो जाए)। अन्यथा हमें स्थिति को मैन्युअल रूप से कोड करना होगा। जब MyCheckBox को फ़ॉर्म में जोड़ दिया गया है, तो हम इसे नियंत्रण संग्रह में जोड़ते हैं।
लेकिन यह कोड बहुत लचीला नहीं है। उदाहरण के लिए, रंग लाल हार्डकोड किया गया है और रंग बदलने के लिए कार्यक्रम को बदलना आवश्यक है। तुम भी एक चेक मार्क के बजाय एक ग्राफिक चाहते हो सकता है।
यहां एक नया, बेहतर चेकबॉक्स वर्ग है। यह कोड आपको दिखाता है कि VB.NET ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग की ओर अगले कुछ कदम कैसे उठाए जाएं।
पब्लिक क्लास बेटरचेकबॉक्स इनचार्ज चेकबॉक्स प्राइवेट सेंटरस्क्वेयर कलर के रूप में = रंग। ब्लू प्राइवेट सेंटरक्वेरीमैजेज बिटमैप प्राइवेट सेंटर के रूप में न्यू आयत (3, 4, 10, 12) के रूप में संरक्षित ओवरराइड्स सब ऑनपेंट _ (बायवैल पेवेंट अस _ सिस्टम)। खिड़कियाँ। फार्म। पेंटएवेंटआग्स) मायबेस। OnPaint (pEvent) यदि मुझे। तब जांच की गई कि अगर सेंटरस्क्वायरमेज कुछ भी नहीं है तो पेवेंट करें। ग्राफिक्स। फिलरक्लेंगल (न्यू सॉलिडब्रश (सेंटरस्क्वेयरकोलर), सेंटरस्क्वेयर) एल्स पेवेंट। ग्राफिक्स। DrawImage (CenterSquareImage, CenterSquare) यदि अंत में उप सार्वजनिक संपत्ति FillColor () के रूप में रंग FillColor = CenterSquareColor के रूप में समाप्त हो जाता है तो सेट करें (ByVal मान रंग के रूप में) CenterquareColor = मान अंत सेट सेट संपत्ति सार्वजनिक संपत्ति FillImage () के रूप में बिटमैप FillImage प्राप्त करें = CenterSquareImage अंतिम सेट सेट करें (ByVal मान को बिटमैप के रूप में) CenterSquareImage = मान समाप्ति सेट समाप्ति संपत्ति कक्षा
क्यों बेटरचेकबॉक्स संस्करण बेहतर है
मुख्य सुधारों में से एक दो का जोड़ है गुण. यह कुछ ऐसा है जो पुराने वर्ग ने बिल्कुल नहीं किया।
पेश किए गए दो नए गुण हैं
रंग भरें
तथा
FillImage
VB.NET में यह कैसे काम करता है इसका जायका लेने के लिए, इस सरल प्रयोग को आज़माएँ। एक मानक परियोजना में एक वर्ग जोड़ें और फिर कोड दर्ज करें:
सार्वजनिक संपत्ति जो भी मिले
जब आप "गेट" टाइप करने के बाद Enter दबाते हैं, तो VB.NET Intellisense पूरे प्रॉपर्टी कोड ब्लॉक में भर जाता है और आपको बस इतना करना है कि आप अपने प्रोजेक्ट के लिए बारीकियों को कोड करें। (गेट और सेट ब्लॉक को हमेशा VB.NET 2010 से शुरू करने की आवश्यकता नहीं होती है, इसलिए आपको इसे शुरू करने के लिए कम से कम Intellisense को बताना होगा।)
सार्वजनिक संपत्ति जो कुछ भी हो अंत में सेट करें (ByVal मूल्य) समाप्ति सेट संपत्ति
इन ब्लॉकों को ऊपर दिए गए कोड में पूरा किया गया है। कोड के इन ब्लॉकों का उद्देश्य संपत्ति के मूल्यों को सिस्टम के अन्य हिस्सों से एक्सेस करने की अनुमति देना है।
मेथड्स के अतिरिक्त के साथ, आप एक पूर्ण घटक बनाने के तरीके पर अच्छी तरह से होंगे। एक विधि का एक बहुत ही सरल उदाहरण देखने के लिए, इस कोड को संपत्ति के घोषणाओं से नीचे बेहतर चेकबॉक्स बॉक्स में जोड़ें:
सार्वजनिक उप जोर () मुझे। फ़ॉन्ट = नई प्रणाली। चित्रकारी। फॉन्ट (_ "Microsoft Sans Serif", 12.0!, _ सिस्टम। चित्रकारी। फ़ॉन्ट शैली। बोल्ड) मी। आकार = नई प्रणाली। चित्रकारी। आकार (200, 35) सेंटरस्क्वेयर। ऑफसेट (CenterSquare) लेफ्ट - 3, सेंटरस्क्वेयर। टॉप + 3) एंड सब
चेकबॉक्स में प्रदर्शित फ़ॉन्ट को समायोजित करने के अलावा, यह विधि बॉक्स के आकार और नए आकार के लिए जाँच किए गए आयत के स्थान को भी समायोजित करती है। नई विधि का उपयोग करने के लिए, बस इसे उसी तरह से कोड करें जैसा आप किसी भी विधि से करेंगे:
MyBetterEmphasizedBox। पर बल देना चाहिए ()
और गुणों की तरह, Visual Studio Microsoft की Intellisense में नई विधि को स्वतः जोड़ता है!
यहाँ मुख्य लक्ष्य यह प्रदर्शित करना है कि कैसे एक विधि को कोडित किया जाता है। आप जान सकते हैं कि एक मानक चेकबॉक्स नियंत्रण भी फ़ॉन्ट को बदलने की अनुमति देता है, इसलिए यह विधि वास्तव में बहुत फ़ंक्शन नहीं जोड़ती है।
इस श्रृंखला का अगला लेख, कस्टम वीबी.नेट कंट्रोल - बियॉन्ड द बेसिक्स!