在比较它们在 vb 网络中不起作用之前检查数字是否为整数



我是vb net的新手,我正在尝试创建一个检查2个文本框输入的程序:

我在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

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

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

如果不希望框在用户键入时更改颜色,则可以使用 Validating 事件而不是 TextChanged 事件。

此外,还可以通过删除Handles ...部分并使用命令AddHandler手动添加它来控制何时应用事件处理程序。这将防止它在您设置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

你可以做这样的事情。

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

如果你想了解更多,你可以看看这个。 如何制作只接受数字的文本框?

相关内容

最新更新