在使用之前,如何加载“future”表单控件?详细解释:

时间:2011-11-24 13:53:58

标签: vb.net vb6 vb6-migration

我正在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?

由于

尼克

3 个答案:

答案 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