如果语句使调试器向后跳过

时间:2017-07-26 11:58:56

标签: vb.net visual-studio visual-studio-2015

我有一个带有菜单表单和其他几个的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。在Form 1中,load事件是以下For循环:

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

每次调试器遇到以&#34开头的行;如果转换为.ToInt32&#34; ,它将退出for循环和load事件子,并向后跳转到Form1上面菜单代码中的.Show()语句。知道是什么原因导致它或如何使它正常执行代码吗?

4 个答案:

答案 0 :(得分:0)

请检查Convert.ToInt32(s.Substring(s.Length - 2))(m_DataTable.Rows(0) ("Limit"))是有效的整数

答案 1 :(得分:0)

好的,我想我已经明白了。 &#34;限制&#34;第0行的列为null,因此无法执行该行。仍然不确定为什么它没有显示任何错误消息,但只是向后跳过。

答案 2 :(得分:0)

听起来像程序集和源代码不同步。您是否更改了配置(Release | Debug)或者未构建,或构建到错误的位置?

答案 3 :(得分:0)

当连接调试器时,{x}系统上的Form.Load事件在x64系统上有一些奇怪的异常处理行为。当在x64版本的Windows上运行的x86进程中未处理异常时,该函数基本上被中止,并且该异常被wow64子系统吃掉。在调用Load之前,执行将在堆栈的最后一个.net代码处继续执行。

有关详细说明,请参阅this answer