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

しかし、それは同じエラーを投げました。ええと、コントロールのテキストを設定できるのはいつですか? 私は初歩的なミスをしましたか?

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 に答える