2017-07-26 5 views
0

私は、Visual Studio 2015 Windowsフォームプログラムをメニューフォームといくつかのものを持っています。問題のメニューボタンのコードは次のようになります。ステートメントがデバッガを後ろにスキップさせる場合

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Me.Visible = False 
    Form1.Show() 
End Sub 

このボタンを押すと、フォーム1がロードされます。フォーム1ロードイベント内ループのために以下の通りです:

For i As Integer = 1 To 10 
     If x_DataTable.Rows(0)(i.ToString()) <> "" Then 
      Me.Controls(("txt" & (i)).ToString()).Text = x_DataTable.Rows(0)(i.ToString()) 
      Dim s As String = Me.Controls(("txt" & (i)).ToString()).Text.Trim() 
      If Convert.ToInt32(s.Substring(s.Length - 2)) < (m_DataTable.Rows(0)("Limit")) Then 
       Me.Controls(("txt" & (i)).ToString()).BackColor = Color.IndianRed 
      End If 
     End If 
    Next 

デバッガが「Convert.ToInt32場合」は、それが終了しで始まる行を打つことをするたびにループし、loadイベントのサブため、上記のメニューコードのForm1.Show()ステートメントにスキップします。これを引き起こしているのは何ですか?また、コードを正常に実行させる方法は?

+0

's.Substring(s.Length - 2)'が整数に解析できなかったために例外がある可能性があります –

+0

'Option Strict On'を有効にしてください – Codexer

+0

@Codexerオプションを厳密にオンにしようとしました。私は問題の行の後半を整数にキャストしますが、それでもそれは行をスキップしました...しかし、提案に感謝します。 – lampinge

答えて

0

Form.Loadイベントは、デバッガが接続されている場合、x86システムと比較してx64システムで多少の奇妙な例外処理動作をします。 x64版のWindowsで実行されているx86プロセスで例外が処理されていない場合、その関数は基本的に中止され、例外はwow64サブシステムによって処理されます。 Loadが呼び出される前にスタック上の最後の.netコードで実行が再開されます。

非常に詳細な説明はthis answerを参照してください。

+0

私は64ビットで動作しているので、おそらくそれを説明するでしょう。あなたが何を記述しているかはまさに何が起こっているのかです。私が読んでいたデータテーブルのセルがnullであることを知りました。それはそれを投げ捨てた未処理の例外部分でした。 – lampinge

+0

ええ、あなたが初めてこの動作に遭遇したときには非常に混乱します。 '.Load'イベントハンドラで作業するたびに、私は常にVisual Studioの" Break on all exceptions "設定をオンにすることを忘れないでください。私がそれを忘れると、実際には何が起こっているかを覚えていない限り、実際には存在しない問題をデバッグすることになります。 –

+0

私はおそらくそれをやり始めるでしょう。ありがとう! – lampinge

0

Convert.ToInt32(s.Substring(s.Length - 2))を確認してください、(m_DataTable.Rows(0) ("Limit"))は[OK]を、私はそれを考え出したと思うの有効な整数

0

です。行0の "制限"列はnullであるため、その行を実行できませんでした。なぜそれがどんなエラーメッセージも表示しなかったのは確かではなく、ちょうど後ろにスキップされました。

0

アセンブリやソースコードのようなサウンドは同期していません。 config(リリース|デバッグ)を変更したのでしょうか、ビルドしていないか、または間違った場所にビルドしましたか?

関連する問題