我无法将Textbox.Text转换为int

时间:2012-11-14 13:42:10

标签: c# wpf

int InvoerEieren = Convert.ToInt32(txtInvoerEieren.Text);

而txt.InvoerEieren.Text是一个带有随机数的文本框,用户可以放(1 - 999)。

这是计算机运行该行代码时的结果。

  

mscorlib.dll中发生未处理的“System.FormatException”类型异常

     

其他信息:输入字符串的格式不正确。

我也尝试过使用“int.Parse()”函数。


编辑:

使用此代码创建新函数时:

int eenGetal = Convert.ToInt32(txtInvoerEieren.Text);
            MessageBox.Show(eenGetal.ToString());

它正在工作,这很奇怪......为什么它不能用于其他功能?

7 个答案:

答案 0 :(得分:1)

您的问题是文本框中的内容无法转换为int。 int表示整数,不能有任何小数空格。

所以你可以使用1,5,34而不是1,23或4.54。此外,您不能使用大于+/- 2,147,483,647的数字。

如果您需要更大的数字,请改用long(然后使用long.Parse)。如果您需要小数点,请使用decimal(和decimal.Parse)。请注意,如果要解析小数,则必须考虑文化,因为必须根据与decimal.Parse一起使用的文化使用正确的小数标记。

由于它是用户输入,您应该考虑使用TryParse变体,因为如果用户输入的输入不正确(即非数字),它们不会“爆炸”。

答案 1 :(得分:0)

您可以尝试使用Int32.TryParse方法。 如果in值是无效格式,或者只是文本,它应该在内部处理异常并返回零值。

答案 2 :(得分:0)

如果您尝试将字符串转换为Double,则应使用Double.TryParse Method来解析该值,因为它会围绕转换包装try / catch。

 double decimalValue;
 bool success = Double.TryParse(txtInvoerEieren.Text, out decimalValue);
 if(success) { Debug.WriteLine("Successful parsing to Double!"); }
 else { Debug.WriteLine("Parsing to Double failed!"); }

类似于转换为Int32值,您应该使用Int32.TryParse Method

 int decimalValue;
 bool success = Int32.TryParse(txtInvoerEieren.Text, out decimalValue);
 if(success) { Debug.WriteLine("Successful parsing to Int32!"); }
 else { Debug.WriteLine("Parsing to Int32 failed!"); }

答案 3 :(得分:0)

Debug.WriteLine(txtInvoerEieren.Text); 看看它是否是您的想法。

这是一个文本框 如果不指定值,则为null或string.empty null和string.empty都将失败该Int解析 如在评论中使用

Int32.TryParse(txtInvoerEieren.Text, out InvoerEieren)

你可以绑定到Int? 但是您需要使用转换器将string.empty转换为null 你需要处理keydown而不允许任何数字。 处理keydown不会处理必须是转换器的sting.empty。 这是我能够绑定到Int的唯一方法。

答案 4 :(得分:0)

如果您不确定用户是否输入了代表正确数字的文字,我建议您使用另一种检查数字有效性的转换方法

int InvoerEieren;
if (Int32.TryParse(txtInvoerEieren.Text, out InvoerEieren)) {
    Console.WriteLine("The number is {0}", InvoerEieren);
} else {
    Console.WriteLine("\"{0}\" cannot be converted to int!", 
                      txtInvoerEieren.Text);
}

答案 5 :(得分:0)

尝试使用Int32.TryParse代替Int32.Parse -

int InvoerEieren;
Int32.TryParse(txtInvoerEieren.Text, out InvoerEieren);

答案 6 :(得分:0)

除非有一些错误的输入,否则这应该永远不会发生。虽然您可以通过在此文本框中添加KeyPress事件来更改此设置。你可以在事件处理函数中添加这些行:

        if (char.IsNumber(e.KeyChar))
        {
            e.Handled = false;
        }
        else
        {
            MessageBox.Show("Please Enter Number");
            e.Handled = true;
        }

我认为这可以解决你的问题。