Vb.net 确保TextBox是介于0和20之间的整数。如果没有,请让用户重新输入

Vb.net 确保TextBox是介于0和20之间的整数。如果没有,请让用户重新输入,vb.net,visual-studio,Vb.net,Visual Studio,如何确保输入是介于0和20之间的整数,如果不是,请清除文本框并让用户重新输入。我一直在尝试这样做,但是程序崩溃了,我想不出来 Private Sub TextBox2_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged For Each ch As Char In TextBox2.Text Dim input As St

如何确保输入是介于0和20之间的整数,如果不是,请清除文本框并让用户重新输入。我一直在尝试这样做,但是程序崩溃了,我想不出来

Private Sub TextBox2_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs)         Handles TextBox2.TextChanged
    For Each ch As Char In TextBox2.Text
        Dim input As String
        input = TextBox2.Text()
        Dim a As Integer = 0
        a = Integer.Parse(input)
        If Not Char.IsDigit(ch) Or a > 20  Or a < 0 Then
        tt.Show("Please Enter Valid Numbers Only", TextBox2, New Point(0, -40), 2)
        TextBox2.Clear()
        End If
    Next
End Sub
Private Sub TextBox2\u TextChanged(ByVal sender作为对象,ByVal e作为System.EventArgs)处理TextBox2.TextChanged
对于TextBox2.Text中的每个ch As字符
将输入设置为字符串
输入=TextBox2.Text()
将a调整为整数=0
a=整数。解析(输入)
如果不是字符IsDigit(ch)或a>20或a<0,则
tt.Show(“请仅输入有效数字”,文本框2,新点(0,-40),2)
TextBox2.Clear()
如果结束
下一个
端接头

使用
验证
事件,然后如果输入无效,则将
e.Cancel
设置为true。下面是我要做的:

Private Sub TextBox2_Validating(sender As System.Object, e As System.ComponentModel.CancelEventArgs) Handles TextBox2.Validating
    If (Not New System.Text.RegularExpressions.Regex("^[0-9]{1,}[0-9]{0,}$").IsMatch(TextBox2.Text) OrElse
        CInt(TextBox2.Text) < 0 OrElse CInt(TextBox2.Text) > 20) Then

        MsgBox("Please Enter Valid Numbers Only")
        e.Cancel = True
    End If
End Sub
Private Sub TextBox2\u Validating(发送方作为System.Object,e作为System.ComponentModel.CancelEventArgs)处理TextBox2.Validating
If(不是New System.Text.RegularExpressions.Regex(“^[0-9]{1,}[0-9]{0,}$”).IsMatch(TextBox2.Text)或lse
CInt(TextBox2.Text)<0或lse CInt(TextBox2.Text)>20)然后
MsgBox(“请仅输入有效数字”)
e、 取消=真
如果结束
端接头
它使用正则表达式验证表达式,首先确保它是一个自然数,然后,假设它是,它确保它在您的范围(0到20)内。如果没有,它将向用户显示消息并取消对字段的验证。

私有子tb\U验证(发送方作为System.Object,e作为System.ComponentModel.CancelEventArgs)处理tb.Validating
Private Sub tb_Validating(sender As System.Object, e As System.ComponentModel.CancelEventArgs) Handles tb.Validating
 Dim result As Boolean = True
 Dim int As Integer
 'make sure it a number
 If Integer.TryParse(tb.Text, int) Then
  If (int < 0 OrElse int > 20) Then
    Dim tt As New ToolTip
    tt.Show("Number must be 0 - 20", Me, tb.Left, tb.Top)
    result = True
  Else
    result = False
  End If
 End If
 e.Cancel = result
End Sub
将结果设置为布尔值=真 将整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型整型 “确保它是一个数字 如果是Integer.TryParse(tb.Text,int),则 如果(int<0或lse int>20),则 将tt设置为新工具提示 tt.Show(“编号必须为0-20”,Me,tb.Left,tb.Top) 结果=真 其他的 结果=错误 如果结束 如果结束 e、 取消=结果 端接头
我对这个完全陌生,我该怎么做?非常感谢您的指导,因此我需要在我的私有子TextBox2_TextChanged方法中调用此事件?不,您将使用此事件处理程序代替文本更改事件处理程序。也就是说,删除你所拥有的并粘贴我的代码。换句话说,删除你的整个
TextBox2\u TextChanged
Sub,并使用我提供的Sub。如果输入不是数字,验证将成功。即使在编辑之后,如果输入不是数字,验证将成功。不,不会。布尔值设置为true,这意味着验证必须在Tryparse条件内成功。try parse上没有“else”,因此如果try parse没有解析,则验证将为true。是否尝试了代码?试着输入“aa”,你就会明白我的意思。对于否决这个问题的人,为什么不解释一下你自己?这不是一个合理的问题吗?