为什么循环不会在表单加载事件中停止在.showdialog

时间:2014-04-10 07:09:28

标签: vb.net loops form-load

你好,这是一个我无法解决的非常奇怪的错误。我的formload中有一个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工作室版本中打开了我的项目,这个神秘的错误没有发生?

希望输入欢呼声

编辑:

这是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

2 个答案:

答案 0 :(得分:0)

关于你的错误,可能你没有初始化你的startseite变量作为你的主要形式,loginOK和pstop永远不会改变,这就是循环永不停止的原因。但是在代码的其余部分,一些常规提示。

这是不必要的

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

如果NewReg不成立,那么根据定义,它是错误的。应该是

    If NewReg Then
    ''
    End If

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

答案 1 :(得分:0)

尝试退出消息框上的循环

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