如何修复,TextBox接受int

时间:2019-07-08 07:37:21

标签: c# wpf

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

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

正如我所说,我试图将Input解析为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应该是一个奇数,它说是偶数。

6 个答案:

答案 0 :(得分:2)

您可以简单地使用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();
        }
    }

答案 1 :(得分:1)

您可以使用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,可以检查您的电话号码是偶数还是奇数。

答案 2 :(得分:1)

您应该尝试解析它。

int.TryParse

答案 3 :(得分:1)

要检查数字是否为偶数:

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

答案 4 :(得分:0)

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

因此,我会if检查是否按下了Enter键,然后允许代码运行,但这可以在KeyUp事件中进行检查,如下所示:< / p>

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

  // your validation
}

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

您的方法number % 2可以简化为:

IsEvenOdd

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

答案 5 :(得分:0)

这应该可以解决问题:
我使用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;