0

私は文字通りこれに困惑しています...

私のコードを実行すると、フォームロードイベント内の配列またはリストで何かをしようとした後、プログラムは残りのコードを実行しません。これが私のコードです:

Public Shared alerts As String()

Private Sub Popup_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Me.Location = New Point(Screen.PrimaryScreen.WorkingArea.Width - Me.Width, Screen.PrimaryScreen.WorkingArea.Height - Me.Height)
    ' Check for alerts
    If My.Settings.hasadmin = False Then
        MsgBox("test1")
        pb_alert.Visible = True
        createAlert("Some functions require admin privileges.")
    End If
End Sub

Private Sub createAlert(ByVal msg As String)
    MsgBox("test2")
    updateAlerts()
    MsgBox("test5")
End Sub

Private Sub updateAlerts()
    MsgBox("test3")
    Dim length = alerts.Length
    MsgBox("test4")
End Sub

なぜこれが起こっているのかわかりません...

表示されるメッセージ ボックスは次のとおりです。「test1」「test2」「test3」その後何も表示されません。アラート配列にアクセスしたためですか?

私には手がかりがありません、助けてください!

また、エラーやコンパイルの問題などはありません。

この後もプログラムは続行しますが、他のメッセージ ボックスが表示されないだけなので、もちろん実際のコードに置き換えたいと思います。

4

1 に答える 1

1

問題は、 is が原因で例外がスローされていることalertsですNothing

これを回避する簡単な方法は、文字列を -1 サイズで初期化して空の配列にすることです。

Public Shared alerts As String(-1)

正しい方法は、Nothing を使用する前にテストすることです。

If alerts IsNot Nothing Then
  ' Do something with it

他にやらなければならないことは、load イベントに例外処理を追加するか、AppDomain 未処理の例外ハンドラを追加するか、WinforsFormsApplicaBase UnhandledException イベントを処理することです。

Load event:

Try
Catch theException As Exception
  Call MsgBox(theException.Message)
End Try
于 2013-09-17T23:56:17.197 に答える