C# 如何修复,该文本框接受int

C# 如何修复,该文本框接受int,c#,wpf,C#,Wpf,我希望输入类型为int,例如int number,而不是string,然后解析。因此,当我试图解析InputNumberint.parse(InputNumber.Text)时,我得到一个错误,输入字符串的格式不正确 它可以工作,但每当我按Backspace删除数字时,我的项目就会崩溃 正如我所说,我已经尝试将输入解析为int。 int.Parse(InputNumber.Text) 所以,如果我能使用int,我的方法会更短,更容易理解 private void InputNumber_Tex

我希望输入类型为int,例如int number,而不是string,然后解析。因此,当我试图解析
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();
            }
        }
publicstaticbool IsEvenOdd(字符串编号)
{
列表偶数=新列表()
{
"0","2","4","6","8"
};
foreach(变量e为偶数)
{
if(number.Substring(0,number.Length-1).ToString()==e)
{
返回true;
}
}
返回false;
}
我期望输出2是偶数,但实际输出是奇数


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

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

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

因此,我会
如果
检查是否按下了enter按钮,然后我会允许代码运行,但这可以在
KeyUp
事件中进行检查,类似这样:

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

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

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

even.Contains(number);

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

您可以使用
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
可以检查您的数字是偶数还是奇数。

这应该可以做到:
我使用
int.TryParse
捕获“错误”输入的所有错误

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

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

编号中的值是多少?它是数字吗?@prasadelkikikar 0,因为用户需要键入它。使用
if(int.TryParse(textBox.Text,out int value)){}
@Sᴇ我在方法或?你的输出中有一个输入错误,它应该是“偶数”和“奇数”。非常感谢,但我有一个建议给你,你应该分开if,因为它不会清除输出。你有myb一点时间打开聊天室吗,我有一个关于另一个程序的问题?如果它与相同的代码相关,请继续,如果这是来自另一个程序,那么最好再写一个问题,在阅读之前,我可以链接你这个问题吗,我已经在3天前发布了,但没有确切的答案?因为他们会将其标记为重复。谢谢我有问题你有时间打开聊天吗,我有关于另一个程序的问题,因为我需要等90分钟再问一次,这会很有帮助。谢谢
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;