我在form1.heres形式1代码
的datagrid的按键上显示form2 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中的searchbox的值,如果有任何值,但是在form2中它在此行上给出错误
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
..仍然会引发nullexception错误..我很困惑我在这里做错了... as 我正在检查是否有值,然后执行代码。
答案 0 :(得分:2)
此行正在抛出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
的实际实例,而不仅仅是空引用。