0

起初我试过这个:

Public Class frmWait

Public Sub New(ByVal uWindowText As String, ByVal uInfoText As String)

    Me.Text = uWindowText
    Me.lblInfoText.Text = uInfoText

End Sub

End Class

但是当我像这样启动表格时

            Dim wait As New frmWait("blah", "blah")
            wait.Show()

...它在这一行告诉我“NullReference Exception”:

Me.lblInfoText.Text = uInfoText

设置表单的文本工作正常。好的,当我尝试设置文本时,我怀疑标签尚未创建。

然后我尝试了以下。我将文本存储在一个变量中,并希望在创建控件时设置它们。我认为“Form_Load”是一个很好的事件:

Public Class frmWait

Private m_sWindowText As String = ""
Private m_sInfoText As String = ""


Public Sub New(ByVal uWindowText As String, ByVal uInfoText As String)

    'we can not set the texts right away because lblInfo does not seem to exist yet

    m_sWindowText = uWindowText
    m_sInfoText = uInfoText

End Sub

Private Sub frmWait_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Me.Text = m_sWindowText
    Me.lblInfoText.Text = m_sInfoText

End Sub

End Class

但它抛出了同样的错误。Ehhhhh,我什么时候可以设置控件的文本?我犯了初学者的错误吗?

4

2 回答 2

4

不要删除设计师所做的事情:) 它试图帮助你。当你创建

Public Sub New(...)

在表格上,它会自动输入:

Public Sub New()

    ' This call is required by the designer.
    InitializeComponent()

    ' Add any initialization after the InitializeComponent() call.

End Sub

InitializeComponent()需要准备好表格以供您使用。

于 2012-12-21T17:14:26.597 回答
2

看起来您缺少 InitializeComponents 调用:

Public Sub New(ByVal uWindowText As String, ByVal uInfoText As String)
  InitializeComponents()

  m_sWindowText = uWindowText
  m_sInfoText = uInfoText
End Sub

该方法调用加载使用设计器创建的所有控件。没有那个电话,你的表格是空的。

于 2012-12-21T17:14:11.503 回答