-5
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());

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

4

7 回答 7

1

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

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

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

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

于 2012-11-14T13:56:23.493 回答
0

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

于 2012-11-14T13:56:22.370 回答
0

如果您尝试将字符串转换为 Double,则应使用Double.TryParse 方法来解析该值,因为它为您包装了一个 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 方法

 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!"); }
于 2012-11-14T13:56:23.983 回答
0

放一个Debug.WriteLine(txtInvoerEieren.Text); 看看它是不是你认为的那样。

它是一个文本框。
如果您不分配值,则将为 null 或 string.empty。
null 和 string.empty 都会使 Int 解析失败。
如评论使用

Int32.TryParse(txtInvoerEieren.Text, out InvoerEieren)

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

于 2012-11-14T13:56:43.553 回答
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);
}
于 2012-11-14T13:57:25.540 回答
0

尝试Int32.TryParse而不是Int32.Parse-

int InvoerEieren;
Int32.TryParse(txtInvoerEieren.Text, out InvoerEieren);
于 2012-11-14T13:58:06.093 回答
0

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

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

我认为这应该可以解决您的问题。

于 2012-11-14T14:06:07.180 回答