【问题标题】:How to fix, that TextBox accepts int如何修复,TextBox 接受 int
【发布时间】:2019-07-08 07:37:21
【问题描述】:

我希望输入类型为 int,例如int 数字,而不是字符串然后解析。因此,当我尝试解析 InputNumber int.Parse(InputNumber.Text) 时,我收到输入字符串格式不正确的错误。

它可以工作,但是每当我按 Backspace 删除数字时,我的项目就会崩溃。

正如我所说,我尝试将输入解析为 int。 int.Parse(InputNumber.Text)

所以如果我可以使用 int 我的方法会更短更容易理解。

 private void InputNumber_TextChanged(object sender, TextChangedEventArgs e)
        {
            string number = InputNumber.Text;

            bool isEvenOdd = EvenOddChecker.IsEvenOdd(number);

            OutputNumber.Text = number + (isEvenOdd ? " is a even number" : " is a odd number");

            if (InputNumber.Text == string.Empty)
            {
                OutputNumber.Clear();
            }
        }
 public static bool IsEvenOdd(string number)
        {
            List<string> even = new List<string>()
            {
                "0","2","4","6","8"
            };
            foreach (var e in even)
            {
                if (number.Substring(0, number.Length - 1).ToString() == e)
                {
                    return true;
                }
            }
            return false;
        }

我希望输出 2 是偶数,但实际输出是奇数。

或者例如3应该是奇数,它说是偶数。

【问题讨论】:

  • number 的值是多少?是数字吗?
  • @PrasadTelkikar 0 ,因为用户需要输入它。
  • 使用if(int.TryParse(textBox.Text, out int value)) { }
  • @SᴇM 在方法中还是?
  • 您的输出中有错字,应该是“an偶数”和“奇数”。

标签: c# wpf


【解决方案1】:

您可以简单地使用int.TryParse() 进行编码,例如

 private void InputNumber_TextChanged(object sender, TextChangedEventArgs e)
 {

     if(int.TryParse(InputNumber.Text, out int number))
        {
            OutputNumber.Text = number + (number % 2 == 0? " is an even number" : " is an odd number");
                                        //No need to write entire function we have modulo to check even odd  

        }

        if (InputNumber.Text == string.Empty)
        {
            OutputNumber.Clear();
        }
    }

【讨论】:

  • 非常感谢,但我有一个建议给你,你应该把 if 分开,因为它不会清除输出。
  • 你有没有一点时间打开聊天,我有一个关于另一个程序的问题?
  • 如果它与相同的代码有关,请继续,如果这是来自另一个程序,那么最好再写一个问题,然后阅读minimal-reproducible-example
  • 我可以把这个问题链接给你吗,我已经在 3 天前发布了,但没有确切的答案?
  • 因为他们会将其标记为重复。
【解决方案2】:

这应该可以解决问题:
我使用int.TryParse 来捕获所有“错误”输入的错误。

private void InputNumber_TextChanged (object sender, TextChangedEventArgs e) 
{
    string numberString = InputNumber.Text;

    if (!int.TryParse(numberString, out int number)) 
    {
        OutputNumber.Clear();
        return;
    }

    bool isEven = EvenOddChecker.IsEven(number);

    OutputNumber.Text = number + (isEven ? " is an even number" : " is an odd number");

    if (InputNumber.Text == string.Empty) 
    {
        OutputNumber.Clear();
    }
}

要检查数字是否是偶数,这应该是最快的方法:

public static bool IsEven (int number) => number % 2 == 0;

【讨论】:

    【解决方案3】:

    首先,您使用了错误的事件 IMO。您想在输入后验证数字,而不是在输入时验证。每次更改文本框中的文本时都会触发您订阅的事件。

    所以我会 if 检查是否按下了回车按钮,然后我会允许代码运行,但这可以在 KeyUp 事件中检查,如下所示:

    private void TextBox_KeyUp(object sender, KeyEventArgs e)
    {
      if (e.Key != Key.Enter) return;
    
      // your validation
    }
    

    在该处理程序中,您可以检查并尝试解析数字,因为您确定输入了数字并且用户希望通过按 Enter 按钮输入该数字(解析后您只需要检查 number % 2 是否等于为零)。

    您的方法IsEvenOdd 也可以简化为:

    even.Contains(number);
    

    如果数字在列表中,则返回 true,否则返回 false。

    【讨论】:

      【解决方案4】:

      您可以使用int.TryParse() 来避免异常:

      private void InputNumber_TextChanged(object sender, TextChangedEventArgs e)
      {
          string number = InputNumber.Text;
      
          if(int.TryParse(number, out int value))
          {
              bool isEven = value % 2 == 0;
      
              OutputNumber.Text = number + (isEven ? " is an even number" : " is an odd number");
      
              if (InputNumber.Text == string.Empty)
              {
                  OutputNumber.Clear();
              }
          }
      }
      

      然后通过yourIntValue % 2 == 0,您可以检查您的号码是偶数还是奇数。

      【讨论】:

      • 谢谢我有问题你有一点时间打开聊天,我对另一个程序有疑问,因为我需要等待 90 分钟再问,这会很有帮助。谢谢
      猜你喜欢
      • 1970-01-01
      • 2012-09-15
      • 2012-01-09
      • 2012-07-06
      • 2023-03-20
      • 2018-01-14
      • 2010-10-04
      • 1970-01-01
      • 2016-07-26
      相关资源
      最近更新 更多