【问题标题】:int.TryParse(String, out Number) only works once in a button click eventint.TryParse(String, out Number) 仅在按钮单击事件中有效
【发布时间】:2014-12-20 19:35:16
【问题描述】:

我有一个文本框供最终用户提交电话号码。我希望能够在用户每次点击提交按钮时评估文本框。我的代码在最终用户第一次单击按钮时运行良好。如果他们必须修复文本框中的错误并再次单击按钮,则 TryParse 不会再次评估 Number 并且 Number 设置为 0。有人可以告诉我我多次使用 TryParse 吗?

string NumberLength = TextBoxPhoneNumber.Text;
int Number;
if (int.TryParse(NumberLength, out Number))
{
    //I parsed the number out. Now lets get the length
    NumberLength = Number.ToString(CultureInfo.InvariantCulture);

    if (NumberLength.Length > 10)
    {
        LblInfo.Visible = true;
        LblInfo.ForeColor = Color.Red;
        LblInfo.Text = "Phone number can not be longer than 10 digits!";
        boolIsValid = false;
    }
    else if (NumberLength.Length < 10)
    {
        LblInfo.Visible = true;
        LblInfo.ForeColor = Color.Red;
        LblInfo.Text = "Phone number can not be shorter than 10 digits!";
        boolIsValid = false;
    }
}

【问题讨论】:

  • 电话号码不应转换为 int,因为 10 次中有 9 次以 0 开头,这将被删除。整数从不以前导零“0”开头,因此 10 将是 9 == 无效。号码 0612345678 将是 612345678 并且无效。
  • 问题不在TryParse使用上。
  • 您能向我们展示更多驻留在其中的代码吗?
  • @Max 假设用户第一次在文本框'f3178593214'中输入一个字母,数字将返回一个 0。如果用户修复了这个字母,然后再次点击提交,那么返回的数字将是“3178593214”,但它永远不会再次评估,因此返回的数字是 0
  • 错误必须在调用该函数的代码中。 TryParse 是正确的。

标签: c# asp.net visual-studio-2013 int tryparse


【解决方案1】:

尝试在 if 末尾添加 else 以再次关闭错误消息,如下所示:

string NumberLength = TextBoxPhoneNumber.Text;
int Number;
if (int.TryParse(NumberLength, out Number))
{
    //I parsed the number out. Now lets get the length
    NumberLength = Number.ToString(CultureInfo.InvariantCulture);

    if (NumberLength.Length > 10)
    {
        LblInfo.Visible = true;
        LblInfo.ForeColor = Color.Red;
        LblInfo.Text = "Phone number can not be longer than 10 digits!";
        boolIsValid = false;
    }
    else if (NumberLength.Length < 10)
    {
        LblInfo.Visible = true;
        LblInfo.ForeColor = Color.Red;
        LblInfo.Text = "Phone number can not be shorter than 10 digits!";
        boolIsValid = false;
    }
    else
    {
        LblInfo.Visible = false;
        boolIsValid = true;
    }
}
else
{
    LblInfo.Visible = true;
    LblInfo.ForeColor = Color.Red;
    LblInfo.Text = "Phone number can only contain digits!";
    boolIsValid = false;
}

【讨论】:

    【解决方案2】:

    为什么你不使用Regex 方法?

     using System.Text.RegularExpressions;
    
    
     Regex rgx = new Regex("\d");
     if(rgx.IsMatch(number))
     {
         //True
     }
    

    【讨论】:

    【解决方案3】:

    如果第二次输入的字符串是数字类型,TRYPARSE 会将其转换为 int 值,但如果输入的值是非数字,则该方法将返回 0。请进行一些验证以在文本中仅接受数字字符串-盒子!!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-26
      • 1970-01-01
      • 2016-04-19
      • 1970-01-01
      • 1970-01-01
      • 2014-02-17
      • 1970-01-01
      相关资源
      最近更新 更多