VB6 में, एक घटना सबरूटीन, जैसे Button1_Click, बहुत कम जटिल था क्योंकि सिस्टम ने उप-रेखा को नाम से सख्ती से बुलाया था। यदि एक Button1_Click ईवेंट मौजूद है, तो सिस्टम ने इसे कॉल किया। यह प्रत्यक्ष और सीधा है।
लेकिन VB.NET में, दो प्रमुख उन्नयन हैं जो बनाते हैं VB.NET SOOPercharged (यह "OOP" है ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग).
- "हैंडल" क्लॉज़ नियंत्रित करता है कि सिस्टम सबरूटीन को कॉल करता है, नाम नहीं।
- प्रेषक और ई पैरामीटर को सबरूटीन में पास किया जाता है।
पैरामीटर्स का उपयोग
आइए एक साधारण उदाहरण देखें कि अंतर क्या है जो VB.NET में पैरामीटर बनाते हैं।
निजी उप बटन 1_ क्लिक करें (
सिस्टम के रूप में ByVal प्रेषक। वस्तु,
ByVal e As System। EventArgs
) संभालती है Button1.Click
'आपका कोड यहाँ जाता है
अंत उप
इवेंट सबरूटीन्स को हमेशा एक "प्रेषक" ऑब्जेक्ट और एक सिस्टम EventArgs पैरामीटर "e" प्राप्त होता है। क्योंकि EventArgs पैरामीटर एक ऑब्जेक्ट है, यह जो भी गुण और तरीके आवश्यक हैं, उनका समर्थन करता है। उदाहरण के लिए, चार मापदंडों को प्राप्त करने के लिए पुराने VB6 माउसमूव इवेंट सबरूटीन का उपयोग किया जाता है:
- पूर्णांक के रूप में बटन
- इंटेगर के रूप में शिफ्ट
- एक्स सिंगल के रूप में
- वाई अस सिंगल
जब अधिक उन्नत चूहे अधिक बटन के साथ बाहर आए, तो VB6 को उनका समर्थन करने में एक वास्तविक समस्या थी। VB.NET केवल एक MouseEventArgs पैरामीटर पास करता है, लेकिन यह बहुत अधिक गुणों और विधियों का समर्थन करता है। और उनमें से प्रत्येक ऐसी वस्तुएं हैं जो और भी अधिक समर्थन करती हैं। उदाहरण के लिए, ई। बटन संपत्ति में ये सभी गुण होते हैं:
- बाएं
- मध्य
- सही
- कोई नहीं
- XButton1
- XButton2
यदि कोई "वर्चुअल" बटन के साथ "ट्रांसडेंटल" माउस का आविष्कार करता है, तो VB.NET को इसका समर्थन करने के लिए केवल .NET फ्रेमवर्क अपडेट करना होगा और इसके परिणामस्वरूप कोई भी पिछला कोड नहीं टूटेगा।
.NET तकनीकों की एक संख्या है जो इन मापदंडों पर बिल्कुल निर्भर करती है। उदाहरण के लिए, चूंकि आपके पीसी में आमतौर पर ग्राफिक्स प्रदर्शित करने के लिए केवल एक ही स्क्रीन होती है, इसलिए आपके कोड को विंडोज़ के लिए उपयोग की जाने वाली ग्राफिक्स में विलय करना पड़ता है। उस कारण से, एक एकल "ग्राफिक्स" ऑब्जेक्ट को साझा करना होगा। जिस तरह से आपका कोड उस "ग्राफिक्स" ऑब्जेक्ट का उपयोग करने में सक्षम है, वह है ई पैरामीटर का उपयोग करना OnPaint इवेंट में पास किया गया PaintEventArgs ऑब्जेक्ट के साथ।
संरक्षित ओवरराइड्स सब ऑनपेंट (
ByVal e As System। खिड़कियाँ। फार्म। PaintEventArgs)
डिम जी अस ग्राफिक्स = ई। ग्राफिक्स
अन्य उदाहरण
आप इन मापदंडों के साथ और क्या कर सकते हैं? वर्णन करने के लिए, मान लीजिए कि आप यह जानना चाहते हैं कि क्या एक स्ट्रिंग, शायद कुछ जिसे आपने टेक्स्टबॉक्स में दर्ज किया है, जब आप एक पर क्लिक करते हैं, तो अन्य टेक्स्टबॉक्स के किसी भी एक संग्रह में मौजूद होता है। आप प्रत्येक टेक्स्टबॉक्स के लिए कुछ दर्जन लगभग समान समान सबरूटीन्स को कोड कर सकते हैं:
यदि TextBox42.Text। के सूचकांक(
खोज स्ट्रिंग। पाठ) = -1
फिर NotFound। पाठ =
"नहीं मिला"
लेकिन सिर्फ एक को कोड करना बहुत आसान है और इसे उन सभी को संभालने दें। प्रेषक पैरामीटर प्रकट करेगा कि कौन सा पाठ बॉक्स क्लिक किया गया था।
निजी सब FindIt (
सिस्टम के रूप में ByVal प्रेषक। वस्तु,
ByVal e As System। EventArgs
) हैंडल TextBox1.Enter,
TextBox2.Enter,
... और पर और पर।. .
TextBox42.Enter
पाठ के रूप में डिम माईटेक्स्टबॉक्स
myTextbox = प्रेषक
डीम इंडेक्सचेयर एज़ एंगर =
myTextbox। पाठ। के सूचकांक(
खोज स्ट्रिंग। पाठ)
यदि IndexChar = -1 फिर _
नहीं मिला। पाठ = "नहीं मिला" _
अन्य _
नहीं मिला। पाठ = "यह मिला!"
अंत उप
हाल ही में, एक प्रोग्रामर ने मुझसे "छह निर्दिष्ट सूचियों में से किसी में क्लिक की गई लाइन को हटाने" का एक बेहतर तरीका पूछा। उन्होंने कहा कि यह कोड की एक दर्जन लाइनों में काम कर रहा था कि बस मुझे भ्रमित किया। लेकिन प्रेषक का उपयोग करना, यह वास्तव में काफी सरल था:
निजी उप सूची बॉक्स_क्लिक करें (
ऑब्जेक्ट के रूप में ByVal प्रेषक,
ByVal e As System। EventArgs
) हैंडल ListBox1.Click, ListBox2.Click
नई सूची के रूप में डिम myListBox
myListBox = प्रेषक
myListBox। आइटम। RemoveAt (myListBox) SelectedIndex)
अंत उप
इस बिंदु पर कील लगाने का एक और उदाहरण एक प्रश्न है जो बेल्जियम में पियरे द्वारा भेजा गया था। पियरे का उपयोग कर Button1 और प्रेषक की समानता का परीक्षण कर रहा था है ऑब्जेक्ट के लिए ऑपरेटर:
यदि प्रेषक बटन 1 है तो ...
यह वाक्यात्मक रूप से सही है क्योंकि प्रेषक और Button1 दोनों ऑब्जेक्ट हैं जिन्हें संदर्भित किया जा सकता है। और चूंकि प्रेषक वास्तव में Button1 के साथ समान है, तो यह काम क्यों नहीं करता है?
उत्तर उस कीवर्ड पर निर्भर करता है जो कथन में थोड़ा पहले पाया जाता है। सबसे पहले, चलो Microsoft प्रलेखन की जाँच करें है ऑपरेटर।
मूल दृश्य ऑपरेटर के साथ दो ऑब्जेक्ट संदर्भ चर की तुलना करता है। यह ऑपरेटर निर्धारित करता है कि दो संदर्भ चर एक ही वस्तु उदाहरण को देखें।
ध्यान दें कि प्रेषक पास है ByVal. इसका मतलब है कि बटन 1 की एक प्रति पारित की गई है, न कि वास्तविक वस्तु। इसलिए जब पियरे यह देखने के लिए परीक्षण करता है कि प्रेषक और Button1 एक ही उदाहरण हैं, तो परिणाम गलत है।
यह जांचने के लिए कि क्या Button1 या Button2 पर क्लिक किया गया है, आपको प्रेषक को एक वास्तविक बटन ऑब्जेक्ट में बदलना होगा और फिर उस ऑब्जेक्ट की एक संपत्ति का परीक्षण करना होगा। पाठ आमतौर पर उपयोग किया जाता है, लेकिन आप टैग या यहां तक कि स्थान संपत्ति में एक मूल्य का परीक्षण कर सकते हैं।
यह कोड काम करता है:
बटन के रूप में डिम myButton
myButton = प्रेषक
अगर मायबटन। पाठ = "बटन 1" फिर