Visual Basi c проверка переменных с циклом do - PullRequest
1 голос
/ 22 января 2020

Итак, я новичок в Visual Basic c, и я делаю проект для школы. Пользователь вводит число в текстовое поле (txtnum), чтобы увидеть, угадывает ли пользователь 1 или более из 3 чисел, которые отображаются случайным образом. , Числа указаны только от 1 до 9, и из-за этого я пытался сделать do l oop, то, что я использовал в c ++, для проверки ввода пользователя, если это число и if между 1-9, и после этого, если отображается окно сообщения, сообщающее пользователю, почему, но после этого msgbox не исчезает, потому что он все еще с той же переменной, и я не могу обновить мою переменную, потому что msgbox не исчезает.

Я использую visual basi c 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

Ответы [ 2 ]

0 голосов
/ 23 января 2020

Самое простое, что нужно сделать - это процесс проверки каждый раз, когда пользователь нажимает кнопку. Кроме того, предполагаемые числа должны храниться как поля или свойства как Integer типы вместо String типа в метках. Наконец, используйте Integer.TryParse() для преобразования ввода текста в целое число.

Public Class Form1

    Shared rng As New Random()

    ' Keep track of the guess count
    Public Property Tries As Integer
    ' Store numbers in properties
    Public Property X1 As Integer
    Public Property X2 As Integer
    Public Property X3 As Integer

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load

        ' Make sure numbers are unique
        Do
            X1 = rng.Next(1, 10)
            X2 = rng.Next(1, 10)
            X3 = rng.Next(1, 10)
        Loop Until X2 <> X1 AndAlso X3 <> X1 AndAlso X2 <> X3

        Label1.Text = String.Empty
        Label2.Text = String.Empty
        Label3.Text = String.Empty

        Tries = 0

    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim x As Integer
        Dim input = TextBox1.Text
        If input.Length > 0 Then
            If Integer.TryParse(input, x) Then
                If x <= 0 OrElse x >= 10 Then
                    MessageBox.Show("Input a single digit.", "Game")
                    Exit Sub
                End If
                Tries = Tries + 1
                If x = X1 Then
                    Label1.Text = X1.ToString()
                    MessageBox.Show("Guessed 1st Number.", "Game")
                ElseIf x = X2 Then
                    Label2.Text = X2.ToString()
                    MessageBox.Show("Guessed 2nd Number.", "Game")
                ElseIf x = X3 Then
                    Label3.Text = X3.ToString()
                    MessageBox.Show("Guessed 3rd Number.", "Game")
                Else
                    MessageBox.Show("Guess again.", "Game")
                End If

                If Label1.Text.Length > 0 AndAlso Label2.Text.Length > 0 AndAlso Label3.Text.Length > 0 Then
                    MessageBox.Show("Guessed all the numbers in " & CStr(Tries) & " tries.", "Game")
                    TextBox1.Enabled = False
                    Button1.Enabled = False
                End If
            Else
                MessageBox.Show("Input isn't numeric.", "Game")
            End If
        End If
    End Sub
End Class

screen

0 голосов
/ 22 января 2020

Если бы вы проверяли ввод в консольном приложении, вы хотели бы использовать Do / L oop, но, поскольку Windows приложения формы управляются событиями, вы бы просто использовали условный оператор If / Then.

Если вы хотите проверить ввод, когда пользователь печатает, то вы бы использовали событие TextChanged, KeyUp или KeyDown, тогда как если вы хотите проверить ввод, когда пользователь «что-то делает» (например, нажав кнопку), вы бы обрабатывать событие "что-то" (например, событие Click кнопки). Все зависит только от того, когда вы хотите проверить ввод. Другой альтернативой является проверка ввода в событии 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...