/ फॉर्म 1 - vb.net, Winforms, पैरेंट-बच्चे में फॉर्म 2 से साझा मूल्य की जांच करते समय / शून्य जांच त्रुटि

फॉर्म 1 - vb.net, winforms, parent-child में form2 से साझा मूल्य की जांच करते समय शून्य जांच त्रुटि

मैं फॉर्म 1 में डेटाग्रिड की कीप्रेस पर फॉर्म 2 दिखा रहा हूं। फॉर्म 1 कोड है

 Public Shared searchbox As TextBox
Private Sub datagridItems_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles datagridItems.KeyPress
If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Enter) Then
If datagridItems.CurrentCell.ColumnIndex = 0 Then
searchbox = datagridItems.CurrentCell.Value
frmitemsearch.ShowDialog()

End If
End If
End Sub

यदि कोई मूल्य है या नहीं, तो फॉर्म 2 में सर्चबॉक्स के मूल्य की जांच कर रहा हूं, लेकिन फॉर्म 2 में इस लाइन पर इसकी त्रुटि है

Private Sub item_search_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim searchstr As String
If IsNothing(frmgrn.searchbox.Text) Then

searchstr = ""
Else
searchstr = frmgrn.searchbox.Text
End If
is nothing fails also I tried this
If String.IsNullOrEmpty(frmgrn.searchbox.text) Then

..यह यह नलसेलेप्शन त्रुटि फेंकता है..मैं इस बारे में उलझन में हूं कि मैं यहां क्या कर रहा हूं ... जैसा कि मैं जांच रहा हूं कि क्या मान मानता है या नहीं और फिर कोड निष्पादित करता है।

उत्तर:

जवाब के लिए 2 № 1

यह रेखा एक फेंक रहा है NullReferenceException:

If IsNothing(frmgrn.searchbox.Text) Then

क्योंकि यह चर है null:

frmgrn

आप "उस कोड को कहीं भी अपने कोड में प्रारंभ नहीं कर रहे हैं। (कम से कम उस कोड में नहीं जिसे आपने हमें दिखाया है।) मैं इसके उपयोग के आधार पर एक पल के लिए मानने जा रहा हूं, frmgrn एक वर्ग स्तरीय चर है Form2. कुछ इस तरह:

Private frmgrn as Form1

यह चर को प्रारंभ नहीं करता है। यह सिर्फ इसे पकड़ने के लिए एक संदर्भ बनाता है।

हालांकि, इसे शुरू करने से परे, इस मामले में आपको इसे केवल आरंभ करने की आवश्यकता नहीं है बल्कि आपको इसकी आवश्यकता है विशेष रूप से के उदाहरण का संदर्भ लें Form1 वह पहले ही लोड हो चुका है। ऐसा करने का एक आसान तरीका है Form1 खुद के लिए एक संदर्भ पारित करने के लिए Form2 जब यह एक उदाहरण बनाता है Form2। आप यहां उस उदाहरण का संदर्भ दे रहे हैं:

frmitemsearch.ShowDialog()

ध्यान दें, हालांकि, आपने यह भी दिखाया नहीं है कि कैसे frmitemsearch शुरू हो जाता है मैं इसे मानने जा रहा हूं "ऐसा कुछ है:

Dim frmitemsearch as New Form2()

इस मामले में आप के लिए एक नया कन्स्ट्रक्टर बना सकते हैं Form2 जो एक उदाहरण के संदर्भ को स्वीकार करता है Form1:

Public Sub New(ByVal form1 As Form1)
frmgrn = form1
End Sub

यह शुरू होगा (माना जाता है) वर्ग स्तर के सदस्य (frmgrn) जब एक उदाहरण Form2 बनाया गया है, जो इसे कन्स्ट्रक्टर को पास किया गया है उसे सेट कर रहा है। तो आप इस तरह के नए कन्स्ट्रक्टर को कॉल करते हैं:

Dim frmitemsearch as New Form2(Me)

इस बिंदु पर जब आप एक उदाहरण बनाते हैं Form2, आप इसे एक मौजूदा उदाहरण दे रहे हैं Form1। यह उस उदाहरण को कक्षा-स्तर परिवर्तनीय में संग्रहीत करेगा। फिर किसी भी समय आपके पास इस तरह का कोड है Form2:

If IsNothing(frmgrn.searchbox.Text) Then

आप एक वास्तविक उदाहरण का संदर्भ लेंगे frmgrn बस एक खाली संदर्भ के बजाय।