2012-01-23 4 views
1

私は4 textboxes持っている:(お金は量よりも大きい場合)C#Winフォームテキストボックスの検証エラー

  1. お金を支払う金額(顧客のお金を確認してください)
  2. 変更
  3. をし、残高(金額が金額より少ない場合)

最後のtextboxは、お客様のお金r)。

私はtextBoxInputのTextChangedハンドラ(私は、それが自動的に更新されますそのテキストボックスにユーザが入力する何かするたびに思っています)の中に私のコードを配置している:それはいつでもしかし、正しく実行

private void textBoxInput_TextChanged(object sender, EventArgs e) 
{ 
    textBoxMoney.Text = textBoxInput.Text; 

    if (int.Parse(textBoxAmount.Text) > int.Parse(textBoxMoney.Text)) 
    { 
     int balance = int.Parse(textBoxAmount.Text) - int.Parse(textBoxMoney.Text); 
     textBoxBalance.Text = balance.ToString(); 
    } 

    if (int.Parse(textBoxMoney.Text) > int.Parse(textBoxAmount.Text)) 
    { 
     int change = int.Parse(textBoxMoney.Text) - int.Parse(textBoxAmount.Text); 
     textBoxChange.Text = change.ToString(); 
    } 
} 

textboxのバックスペースを押す(またはデータを消去する)と、フォーマットエラーが発生します。私はそれに手紙を入れてもエラーが出る。ユーザーが手紙を入力してデータが消去されたときにはどうすれば表示されるのを防ぐことができますか?また、exの値を大きくすると、別のエラーが表示されます。

支払額= 600、入力= 1000、残高テキストボックス= 550、変更テキストボックス= 330です。正しく計算されません。誰か助けてくれますか?お金を扱う場合

答えて

3

、それは代わりにIntegerDecimalタイプを使用する方が良いでしょうが、あなた例えば、それは代わりにParseTryParse()方法を使用することがおそらく良いでしょう。バックスペースを使用すると、テキストボックスが空で、解析が失敗するため、フォーマットエラーが発生します。

クイックリワーク:

private void textBoxInput_TextChanged(object sender, EventArgs e) { 
    textBoxMoney.Text = textBoxInput.Text; 

    int amount = 0; 
    int money = 0; 
    int balance = 0; 
    int change = 0; 

    int.TryParse(textBoxAmount.Text, out amount); 
    int.TryParse(textBoxMoney.Text, out money); 

    if (amount > money) 
    balance = amount - money; 
    if (money > amount) 
    change = money - amount; 

    textBoxBalance.Text = balance.ToString(); 
    textBoxChange.Text = change.ToString(); 
} 
+0

大変ありがとうございます!私は解析とtryparseの違いを調べなければなりません:)) –

+0

@rjtubera [MSDN:Int32.TryParse Method](http://msdn.microsoft.com/en-us/library/f02979c7)へのリンクです.aspx) – LarsTech

+0

そして、私はこれらのTextBox-esでLetterを許可しないことでKeyPressEventを処理することを推奨します。 – Burimi