मैं फॉर्म 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
बस एक खाली संदर्भ के बजाय।