我正在vb6程序上执行迁移到vb.net。理解这个问题需要的基本知识是,有两种形式需要相互通信,即frmInput1和frmInput2。我有以下代码(在frmInput1后面),它检查frmInput2上的文本框是否具有某个值,似乎在加载之前:
If frminput2.lblInputMac.Text <> "(no filename)" Then
Dim calc As CalculationCaster = New CalculationCaster
Call calc.FillMac()
cmdNext.Enabled = False
frminput2.FraInner.Enabled = True
运行时,我在If行上收到以下错误:
"Object reference not set to an instance of an object."
我假设这意味着尚未加载frmInput2中的对象。如何才能在显示之前加载frmInput2?
由于
尼克
答案 0 :(得分:1)
frminput2
可能是类型 frminput2的隐式全局实例。
如果在VB6中定义名为MyForm
的表单类型,则平台会自动创建同名MyForm
的隐式全局变量。无论何时在代码中引用此变量,它都会自动为您加载表单实例。
就好像你有这个代码一样。
Public Function MyForm() As MyForm
Static f As MyForm
If f Is Nothing Then
f = New MyForm
End If
Return f
End Function
答案 1 :(得分:0)
dim frm1 as new frmInput1
dim frm2 as new frmInput2
此时,您应该能够在表单之间进行通信而不显示它们。您不应在未明确实例化的情况下引用表单。
答案 2 :(得分:0)
创建表单实例。
Dim f As New frmInput2
然后您可以在表单上使用任何属性,方法或控件。
If f.lblInputMac.Text <> "(no filename)" Then
...
End If