2010-11-01 6 views
8

मैं vb.net के लिए काफी नया हूं, और खिड़कियां पूरी तरह से विकास का निर्माण करती हैं, इसलिए यह सब बहुत बुनियादी हो सकता है, लेकिन यहां जाता है।vb.net में रूपों के लिए कस्टम कन्स्ट्रक्टर: सर्वोत्तम प्रथाओं

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

public sub new(byval my_parameter as Foo) 
    Me.new() 
    Me.my_parameter = my_parameter 
    do_some_initialisation() 
end sub 

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

तो मुझे ऐसा कुछ कैसे करना चाहिए?

उत्तर

14

यह एक काफी सरल उदाहरण है।

Dim childForm1 As New form2Name(item) 
childForm1.Text = "Title of your new form" 
Call childForm1.Show() 

form2Name(item) "form2Name" की तरह फट जाएगा प्रपत्र आप खोलना चाहते हैं का नाम है और "आइटम": यह आपके "मुख्य" प्रपत्र (एक आप अपने नए रूप कॉल करना चाहते हैं) में चला जाता है पास करने के लिए पैरामीटर है।

Public Sub New(ByVal item As String) 
    InitializeComponent() ' This call is required by the Windows Form Designer. 
    MsgBox(item) 
End Sub 

आप जो कुछ भी आप अपने रूप में की जरूरत कर सकते हैं:

अपने नए रूप में (form2Name) इस कोड जोड़ें। उम्मीद है कि यह मदद करता है।

3

VB.Net के लिए मुझे लगता है कि कॉल करने के बाद कर रहे हैं

MyBase.New() 
+0

brevitas – Martijn

+0

नीचे aswer के साथ इस Combinding के +1: अगर मैं 'MyBase.New()' कहते हैं, मैं अभी भी कॉल करने के लिए है 'InitializeComponent()'? – Martijn

+0

डिफ़ॉल्ट रूप कन्स्ट्रक्टर सामान्य रूप से इसे कॉल करता है। टीबीएच आप कोड ठीक है अगर आप सिर्फ me.new() लाइन को हटा दें। मैं बस दिखा रहा था कि बेस कन्स्ट्रक्टर को सही तरीके से कैसे कॉल करें। –

2

आपकी व्युत्पन्न फॉर्म क्लास स्वचालित रूप से System.Windows.Forms.Form के लिए डिफ़ॉल्ट कन्स्ट्रक्टर प्राप्त करती है। आपके व्युत्पन्न कन्स्ट्रक्टर कोड निष्पादित होने से पहले यह डिफ़ॉल्ट कन्स्ट्रक्टर स्वचालित रूप से लागू होता है। डिफ़ॉल्ट कन्स्ट्रक्टर के लिए आपको कोई कोड नहीं मिल रहा है क्योंकि व्युत्पन्न वर्ग डिफ़ॉल्ट कन्स्ट्रक्टर का विशेषज्ञ नहीं है। यदि आप अपना खुद का डिफ़ॉल्ट कन्स्ट्रक्टर परिभाषित करना चाहते हैं, तो आप कर सकते हैं। आप पैरामीटर के बिना एक कन्स्ट्रक्टर भी परिभाषित कर सकते हैं।

आप कोड ठीक काम करना चाहिए अगर आप इस लाइन को हटा दें:

Me.New() 
संबंधित मुद्दे