Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 在比较数字之前检查数字是否为整数在vb net中不起作用_Vb.net - Fatal编程技术网

Vb.net 在比较数字之前检查数字是否为整数在vb net中不起作用

Vb.net 在比较数字之前检查数字是否为整数在vb net中不起作用,vb.net,Vb.net,我是vb net的新手,我试图创建一个程序来检查两个文本框输入: 我有MS Access vba的经验,我们可以强制输入框只接受数字。但是我发现这在VB.net中是不可能的。所以我对整数检查做了一些研究,得出了以下结论: Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.txtTeam1.Text = 0 Me

我是vb net的新手,我试图创建一个程序来检查两个文本框输入:

我有MS Access vba的经验,我们可以强制输入框只接受数字。但是我发现这在VB.net中是不可能的。所以我对整数检查做了一些研究,得出了以下结论:

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.txtTeam1.Text = 0
        Me.txtTeam2.Text = 0
    End Sub

    Private Sub txtTeam1_TextChanged(sender As Object, e As EventArgs) Handles txtTeam1.TextChanged
        If checkType(Me.txtTeam1.Text) = True Then
            changeBackColor()
        Else
            MessageBox.Show("Invlaid Entry", "Please Enter a number")
        End If
    End Sub

    Private Sub txtTeam2_TextChanged(sender As Object, e As EventArgs) Handles txtTeam2.TextChanged
        If checkType(Me.txtTeam2.Text) = True Then
            changeBackColor()
        Else
            MessageBox.Show("Invlaid Entry", "Please Enter a number")
        End If
    End Sub

    Function changeBackColor()
        Try
            If Convert.ToInt32(Me.txtTeam1.Text) < Convert.ToInt32(Me.txtTeam2.Text) Then
                Me.txtTeam1.BackColor = Color.Gray
                Me.txtTeam2.BackColor = Color.Green
            ElseIf CInt(Me.txtTeam1.Text) > CInt(Me.txtTeam2.Text) Then
                Me.txtTeam1.BackColor = Color.Green
                Me.txtTeam2.BackColor = Color.Gray
            Else
                'Both are equal
                Me.txtTeam1.BackColor = Color.Gray
                Me.txtTeam2.BackColor = Color.Gray
            End If
        Catch ex As Exception
            MessageBox.Show("Invlaid Entry", "Please Enter a number")
        End Try

    End Function

    Function checkType(num As String) As Boolean
        Try
            Convert.ToInt32(num)
            Return True
        Catch ex As Exception
            Return False
        End Try
    End Function

End Class
公共类表单1
私有子表单1_Load(发送方作为对象,e作为事件参数)处理MyBase.Load
Me.txtTeam1.Text=0
Me.txtdeam2.Text=0
端接头
私有子txtTeam1_TextChanged(发送者作为对象,e作为事件参数)处理txtTeam1.TextChanged
如果checkType(Me.txtTeam1.Text)=True,则
changeBackColor()
其他的
MessageBox.Show(“输入输入”、“请输入数字”)
如果结束
端接头
私有子txtTeam2_TextChanged(发送者作为对象,e作为事件参数)处理txtTeam2.TextChanged
如果checkType(Me.txtTeam2.Text)=True,则
changeBackColor()
其他的
MessageBox.Show(“输入输入”、“请输入数字”)
如果结束
端接头
函数changeBackColor()
尝试
如果Convert.ToInt32(Me.txtTeam1.Text)CInt(Me.txtTeam2.Text)然后
Me.txtTeam1.BackColor=Color.Green
Me.txtdeam2.BackColor=Color.Gray
其他的
"两者都是平等的
Me.txtTeam1.BackColor=Color.Gray
Me.txtdeam2.BackColor=Color.Gray
如果结束
特例
MessageBox.Show(“输入输入”、“请输入数字”)
结束尝试
端函数
函数checkType(num作为字符串)作为布尔值
尝试
转换为32(num)
返回真值
特例
返回错误
结束尝试
端函数
末级

但是,只要加载表单,我就会收到无效条目消息框,即使默认值为0。即使在任一文本框中输入了有效的数字,也会收到无效的输入消息

您可以这样做

    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    If System.Text.RegularExpressions.Regex.IsMatch(TextBox1.Text, "[^0-9]") Then
        MessageBox.Show("Please enter only numbers.")
        TextBox1.Text = TextBox1.Text.Remove(TextBox1.Text.Length - 1)
    End If
    End Sub
如果你想知道更多,你可以看看这个。
你可以这样做

    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    If System.Text.RegularExpressions.Regex.IsMatch(TextBox1.Text, "[^0-9]") Then
        MessageBox.Show("Please enter only numbers.")
        TextBox1.Text = TextBox1.Text.Remove(TextBox1.Text.Length - 1)
    End If
    End Sub
如果你想知道更多,你可以看看这个。

您可以使用该方法检查字符串是否可以解析为整数,如果不能,则不会引发异常。如果可以将字符串解析为数字,则只返回True并将值放入第二个参数,否则返回False并将第二个参数设置为0(实际上,它使用第二个参数的变量类型的默认值)

如果不希望框在用户键入时改变颜色,可以使用验证事件而不是TextChanged事件

此外,您可以通过删除
Handles…
部分并使用命令手动添加它来控制何时应用事件处理程序。这将防止它在您设置
txtTeam1.Text=“0”时抱怨
但在设置其他文本框之前。您甚至可以仅使用一个事件处理程序来处理多个事件,如下所示:

Public Class Form1

    Sub ChangeBackColors()
        Dim team1 = 0
        Dim team2 = 0

        If Integer.TryParse(txtTeam1.Text, team1) AndAlso Integer.TryParse(txtTeam2.Text, team2) Then

            If team1 < team2 Then
                Me.txtTeam1.BackColor = Color.Gray
                Me.txtTeam2.BackColor = Color.Green
            ElseIf team1 > team2 Then
                Me.txtTeam1.BackColor = Color.Green
                Me.txtTeam2.BackColor = Color.Gray
            Else
                'Both are equal
                Me.txtTeam1.BackColor = Color.Gray
                Me.txtTeam2.BackColor = Color.Gray
            End If

        Else
            MessageBox.Show("Invalid Entry", "Please enter a whole number.")

        End If

    End Sub

    Private Sub txtTeam_Validating(sender As Object, e As EventArgs)
        ChangeBackColors()

    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        txtTeam1.Text = "0"
        txtTeam2.Text = "0"

        AddHandler txtTeam1.Validating, AddressOf txtTeam_Validating
        AddHandler txtTeam2.Validating, AddressOf txtTeam_Validating

    End Sub

End Class
公共类表单1
子变更背景颜色()
尺寸组1=0
尺寸组2=0
如果Integer.TryParse(txtTeam1.Text,team1)和Integer.TryParse(txtTeam2.Text,team2),则
如果团队1<团队2,则
Me.txtTeam1.BackColor=Color.Gray
Me.txtTeam2.BackColor=Color.Green
如果团队1>团队2,则
Me.txtTeam1.BackColor=Color.Green
Me.txtdeam2.BackColor=Color.Gray
其他的
"两者都是平等的
Me.txtTeam1.BackColor=Color.Gray
Me.txtdeam2.BackColor=Color.Gray
如果结束
其他的
MessageBox.Show(“无效输入”,“请输入整数”)
如果结束
端接头
私有子txtTeam_验证(发送方作为对象,e作为事件参数)
变色
端接头
私有子表单1_Load(发送方作为对象,e作为事件参数)处理MyBase.Load
txtTeam1.Text=“0”
txtTeam2.Text=“0”
AddHandler txtTeam1.正在验证,txtTeam\u的地址正在验证
AddHandler txtTeam2.正在验证,txtTeam\u的地址正在验证
端接头
末级
您可以使用该方法检查字符串是否可以解析为整数,如果不能,则不会引发异常,如果可以将字符串解析为数字,则只返回True并将值放入第二个参数,否则返回False并将第二个参数设置为0(实际上,它使用第二个参数的变量类型的默认值)

如果不希望框在用户键入时改变颜色,可以使用验证事件而不是TextChanged事件

此外,您可以通过删除
Handles…
部分并使用命令手动添加它来控制何时应用事件处理程序。这将防止它在您设置
txtTeam1.Text=“0”时抱怨
但在设置其他文本框之前。您甚至可以仅使用一个事件处理程序来处理多个事件,如下所示:

Public Class Form1

    Sub ChangeBackColors()
        Dim team1 = 0
        Dim team2 = 0

        If Integer.TryParse(txtTeam1.Text, team1) AndAlso Integer.TryParse(txtTeam2.Text, team2) Then

            If team1 < team2 Then
                Me.txtTeam1.BackColor = Color.Gray
                Me.txtTeam2.BackColor = Color.Green
            ElseIf team1 > team2 Then
                Me.txtTeam1.BackColor = Color.Green
                Me.txtTeam2.BackColor = Color.Gray
            Else
                'Both are equal
                Me.txtTeam1.BackColor = Color.Gray
                Me.txtTeam2.BackColor = Color.Gray
            End If

        Else
            MessageBox.Show("Invalid Entry", "Please enter a whole number.")

        End If

    End Sub

    Private Sub txtTeam_Validating(sender As Object, e As EventArgs)
        ChangeBackColors()

    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        txtTeam1.Text = "0"
        txtTeam2.Text = "0"

        AddHandler txtTeam1.Validating, AddressOf txtTeam_Validating
        AddHandler txtTeam2.Validating, AddressOf txtTeam_Validating

    End Sub

End Class
公共类表单1
子变更背景颜色()
尺寸组1=0
尺寸组2=0
如果Integer.TryParse(txtTeam1.Text,team1)和Integer.TryParse(txtTeam2.Text,team2),则
如果团队1<团队2,则
Me.txtTeam1.BackColor=Color.Gray
Me.txtTeam2.BackColor=Color.Green
如果团队1>团队2,则
Me.txtTeam1.BackColor=Color.Green
Me.txtdeam2.BackColor=Color.Gray
其他的
“他们都是e