首页 > 解决方案 > 使用 do 循环的 Visual Basic 变量验证

问题描述

所以我是 Visual Basic 的新手,我正在为学校做一个项目,用户在文本框(txtnum)中输入一个数字,以查看用户是否猜测随机显示的 3 个数字中的 1 个或多个。这些数字仅适用于 1 到 9,因此我试图制作一个 do 循环,就像我在 c++ 中使用的那样,以验证用户的输入,如果它是一个数字并且是否在 1-9 之间,然后如果显示一个消息框,告诉用户原因,但在此之后 msgbox 不会消失,因为它仍然具有相同的变量,我无法更新我的变量,因为 msgbox 不会消失。

我使用visual basic 2010 express,并用windows窗体做这个项目。


Private Sub btplay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btplay.Click
        ' A geração de numeros aleatórios inteiros entre 1 e 9

        lbln1.Text = Int(1 + Rnd() * 9) 'generates an integer on first label
        lbln2.Text = Int(1 + Rnd() * 9) 'generates an integer on second label
        lbln3.Text = Int(1 + Rnd() * 9) 'generates an integer on third label

        Do
            Do
                If ((IsNumeric(txtnum.Text) = False)) Then 'check is input is a number
                    MsgBox("Opção inválida!" & vbNewLine & "Por favor insira um número entre 1 e 9!", 0, "Número inválido")
                    txtnum.Clear() 
                    txtnum.Focus()
                End If

            Loop Until (IsNumeric(txtnum.Text) = True) 'segundo loop 

            If ((Int(txtnum.Text) < 0) Or (Int(txtnum.Text) > 10)) Then 'check if input on gap
                MsgBox("Opção inválida!" & vbNewLine & "Por favor insira um número entre 1 e 9!", 0, "Número inválido")
                txtnum.Clear() 
                txtnum.Focus() 
            End If

        Loop While ((Int(txtnum.Text) < 0) Or (Int(txtnum.Text) > 10)) 


            'Validação dos números e atualização da pontuação
            If txtnum.Text = lbln1.Text And txtnum.Text = lbln2.Text And txtnum.Text = lbln3.Text Then
                lblpontos.Text = lblpontos.Text + 50 ' got 3 numbers right 

            ElseIf (txtnum.Text = lbln1.Text And txtnum.Text = lbln2.Text) Or (txtnum.Text = lbln1.Text And txtnum.Text = lbln3.Text) Or (txtnum.Text = lbln2.Text And txtnum.Text = lbln3.Text) Then
                lblpontos.Text = lblpontos.Text + 25 ' got 2 numbers right

            ElseIf txtnum.Text = lbln1.Text Or txtnum.Text = lbln2.Text Or txtnum.Text = lbln3.Text Then
                lblpontos.Text = lblpontos.Text + 10 'got 1 number right

            ElseIf txtnum.Text <> lbln1.Text And txtnum.Text <> lbln2.Text And txtnum.Text <> lbln3.Text Then
                lblpontos.Text = lblpontos.Text - 5 ' hasnt got any number right
            End If
End Sub

标签: vb.net

解决方案


如果您在控制台应用程序中验证输入,您可能希望使用 Do/Loop,但由于 Windows 窗体应用程序是事件驱动的,您只需使用条件 If/Then 语句。

如果您想在用户键入时验证输入,那么您将使用 TextChanged、KeyUp 或 KeyDown 事件,而如果您想在用户“做某事”(例如单击按钮)时验证输入,您将处理“某事”事件(例如按钮的单击事件)。这完全取决于您何时要验证输入。另一种方法是在 TextBox 的 Validating 事件中验证输入。

每当用户执行某些操作(例如单击按钮)时,我都会亲自进行控件验证。下面是一个验证的例子:

  1. 输入是一个有效的整数
  2. 整数介于 1 和 9 之间

例子:

Private Sub ButtonValidate_Click(ByVal sender As Object, ByVal e As EventArgs) Handles ButtonValidate.Click
    Dim input As Integer
    Dim isValidInteger As Boolean = Integer.TryParse(txtnum.Text, input)
    If (Not isValidInteger) Then
        MessageBox.Show("Please enter a valid Integer.")
    ElseIf (input < 0 OrElse input > 10) Then
        MessageBox.Show("Please enter a valid Integer between 1 and 9.")
    Else
        ' input is a number between 1 and 9
    End If
End Sub

推荐阅读