【问题标题】:How can I check string in textbox as integer in Visual Basic?如何在 Visual Basic 中将文本框中的字符串检查为整数?
【发布时间】:2012-11-16 08:45:56
【问题描述】:

我有 3 个文本框(日、月、年),我想检查输入是否为例如day 必须是从 1 到 31 等等。

我的代码是:

If InputDan.Text < "1" Or InputDan > "31" Then Warning.Text = "Not a valid day input." Else Warning.Text = ""

此外,我的日期和月份输入限制为 2 个字符,年份限制为 4 个。 它适用于从 10 到 31 的数字,并且当输入为 0 或 32 及以上时,它会正确发出警告消息。

问题来了……

当我输入从 4 到 9 的数字时,它会显示一条警告消息,因为我后来发现程序将一个字符输入后的空白区域视为 0。 因此,如果我输入 4,程序会将其读取为 40,依此类推。

我可以通过某种方式将 String 输入转换为 Int 来解决这个问题吗?

【问题讨论】:

    标签: vb.net string textbox


    【解决方案1】:

    您需要先将数字解析为整数,然后才能进行比较,否则&gt;"11" 将按字母顺序而不是按数字顺序进行比较。

    Dim day As Integer
    Dim valid As Boolean = Int32.TryParse(InputDan.Text, day)
    

    现在您知道输入的数字是否正确,如果不正确,您可以显示警告。

    我建议使用不同的方法来检查输入是否是正确的日期,因为您必须考虑该月的天数(还有闰年、不同的日历等)。所以使用当前的culture's calendar 并以这种方式查看给定月份的天数是否正确:

    Dim daysInMonth = CultureInfo.CurrentCulture.Calendar.GetDaysInMonth(year, month)
    If day > daysInMonth OrElse day < 1 Then
        ' show warning '
    End If
    

    (假设你已经用Int32.TryParse检查了年份和月份部分)

    【讨论】:

      【解决方案2】:

      比从后面的代码中执行此操作更好,asp.net 已经验证了这里是一个表示日期的文本框示例,它必须在 1 到 31 之间:

      <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
      
      <asp:RangeValidator ID="RangeValidator1" runat="server" 
          ErrorMessage="You have to insert a valid day" ControlToValidate="TextBox2" MaximumValue="31" MinimumValue="1"></asp:RangeValidator>
      

      检查一下

      【讨论】:

      • 我认为这是winforms。
      【解决方案3】:

      您的问题是,“9”(字符串)比“31”“更大”。因为排序是在第一个字符上完成的,然后是第二个,依此类推。

          Dim Value As Integer
          ' is there an (integer) NUMBER in the textbox?
          If Integer.TryParse(InputDan.Text, Value) Then
              If Value > 0 AndAlso Value < 31 Then
                  ' do something
              Else
                  MessageBox.Show("please enter a number!")
              End If
          Else
              MessageBox.Show("please enter a number!")
          End If
      

      使用“TryParse”,您可以测试字符串是否可以转换为整数(或 Double、Single,无论实现 TryParse 方法),如果可以转换,则将值存储在第二个参数中。

      【讨论】:

        【解决方案4】:

        您应该使用 Strict on" 来避免编码问题 - 基本上您是在比较字符串。它们的行为不像整数那样进行比较。

        【讨论】:

        • 虽然Strict On 无论如何都不能解决问题,因为从编译器的角度来看,一切都很好。他只是比较两个字符串,但想比较“数字”。不幸的是,对程序员的大脑没有严格要求;)
        【解决方案5】:

        试试这样:(假设框架高于/或 3.5)

        If Not IsNumeric(InputDan.Text) OrElse _
           Not Enumerable.Range(1, 31).Contains(CInt(InputDan.Text)) Then
            Warning.Text = "Not a valid day input."
        Else
            Warning.Text = ""
        End If
        

        它将首先验证输入必须是一个数字,然后验证它是否在 1 到 31 的范围内。我认为 Days 不能是 1.5,所以我调用了 CInt

        OrElse 就是我们所说的ShortCircuit。如果第一个条件失败,第二个条件将不会评估。

        【讨论】:

          猜你喜欢
          • 2011-12-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多