【问题标题】:Why does loop doesnt stop at .showdialog in formloadevent为什么循环不会在表单加载事件中的 .showdialog 处停止
【发布时间】:2014-04-10 07:09:27
【问题描述】:

您好,这是一个我无法解决的非常奇怪的错误。我的表单加载中有一个这样的while循环:

While loginOK = False And pstop = False
        LoginForm1.ShowDialog()
        If NewReg = True Then
            While RegErfolgreich = False
                Registrierung.ShowDialog()

                Dim con As New SqlConnection(My.Settings.SLXADRIUMDEVConnectionString)
                con.Open()

                Dim cmd = New SqlCommand("Insert Into sysdba.PL_Userverwaltung        (Benutzername, Passwort, [E-Mail-Adresse], Profil_OK) Values('" & RegBenutzername & "', '" & RegPassword & "', '" & RegEMailAdresse & "', 'f')", con)

                If cmd.ExecuteNonQuery() = 1 Then
                    My.Settings.Benutzername = RegBenutzername
                    My.Settings.Passwort = RegPassword
                    My.Settings.Save()
                    Me.Close()
                    RegErfolgreich = True
                Else
                    MsgBox("Es ist ein Fehler aufgetreten.")
                End If

            End While
        Else
            NewReg = False
        End If

    End While

问题是在关闭 loginform1 后他跳回到循环中,当他再次开始循环时,他打开 loginform1 并立即关闭它。并在while循环中再次循环。

这意味着我有一个无限循环,它显示 loginform1 并在一毫秒后关闭它。 有一件事要提的是,我的一个朋友在一个较旧的 vs studio 版本中打开了我的项目,并且这个神秘的错误没有发生??

希望大家多多支持

编辑:

这里是 loginform1 代码

Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click

    If UsernameTextBox.Text <> "" And PasswordTextBox.Text <> "" Then
        Startseite.LoginUsername = UsernameTextBox.Text
        Startseite.LoginPassword = PasswordTextBox.Text
        Startseite.loginOK = True
        Me.Close()
    Else
        MsgBox("Bitte Benutzername und Passwort eingeben!")
    End If

End Sub

Private Sub Cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel.Click
    Startseite.pstop = True
    Me.Close()
End Sub

Private Sub LoginForm1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    If My.Settings.Benutzername <> "" And My.Settings.Passwort <> "" Then
        'MsgBox(My.Settings.Benutzername & "  " & My.Settings.Passwort)
        UsernameTextBox.Text = My.Settings.Benutzername
        PasswordTextBox.Text = My.Settings.Passwort
    End If
End Sub

Private Sub lblNeuRegistrieren_Click(sender As Object, e As EventArgs) Handles lblNeuRegistrieren.Click
    Startseite.NewReg = True
    Me.Close()
End Sub

【问题讨论】:

  • 为了回答你的问题,LoginForm1 的代码会很有趣。在表单的代码中,是否有在某些情况下立即关闭表单的代码?另请注意,NewReg = False 行没有意义,因为它仅在 NewReg 已经为假时运行。
  • 显示编辑 :) 没问题
  • Load 事件是有风险的,在某些 Windows 版本上,它有在附加调试器时吞下异常的习惯。在“输出”窗口中查找任何“第一次机会异常”通知。使用 Debug + Exceptions, Throw 复选框让调试器停止它们。

标签: vb.net loops form-load


【解决方案1】:

关于你的错误,可能你没有将你的 startseite 变量初始化为你的主表单, loginOK 并且 pstop 永远不会改变,这就是循环永远不会停止的原因。但在您的代码的其余部分,一些一般性提示。

这是不必要的

    If NewReg = True Then
    ''
    Else
        NewReg = False
    End If

如果 NewReg 不为真,则根据定义它为假。应该是

    If NewReg Then
    ''
    End If

此外,在 loginForm1 上重载 showDialog 是比在第二个表单上添加 yourmainclass 对象更好的解决方案。它更容易调试并提供更好的可重用性。

【讨论】:

  • startseite 是我的主要形式。 while 循环是为了让你在 startseite 弹出之前注册并登录。在 loginform1 中点击 ok 后 loginok 会发生变化,并设置密码和登录权限。
  • 当您在 loginform1 中单击确定时,loginok 不会改变,这就是为什么您的循环会一直持续下去的原因。当您应该执行 myobject.value=true 时,您正在执行 myclass.value = true。使用 me.owner 或 me.parent(取决于框架)而不是 startseite 可能会成功,因为它实际上指向对象。
  • 谢谢仓鼠,我已经搞定了。经过几个小时的尝试:))
【解决方案2】:

尝试在消息框上退出循环

If cmd.ExecuteNonQuery() = 1 Then
    My.Settings.Benutzername = RegBenutzername
    My.Settings.Passwort = RegPassword
    My.Settings.Save()
    Me.Close()
    RegErfolgreich = True
Else
    MsgBox("Es ist ein Fehler aufgetreten.")
    Exit While
End If

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多