-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(およびdecimal.Parse) を使用します。小数を解析する場合は、使用しているカルチャに従って正しい小数点マーカーを使用する必要があるため、カルチャを考慮する必要があることに注意してくださいdecimal.Parse

また、これはユーザー入力であるため、代わりにバリアントを使用することを検討する必要がTryParseあります。ユーザーが間違った入力 (つまり、数値以外) を行った場合に「爆発」しないためです。

于 2012-11-14T13:56:23.493 に答える
0

Int32.TryParse メソッドを使用してみることができます。値が無効な形式である場合、または単なるテキストである場合、内部で例外を処理し、ゼロ値を返す必要があります。

于 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 に変換する必要があります。
また、キーダウンを処理し、数字以外は許可しないようにする必要があります。キーダウンのハンドルは、コンバーターでなければならない 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 に答える