0

こんにちは、ビジュアル スタジオの初心者です。

これは、ATM の例を作成するためのこれまでのコードです。テキスト ボックスがあり、金額を入力します。次に、クレジットをクリックするこのボタンがあり、残高というラベルに金額が追加されます。残高からお金を引き出す debit という名前のボタン。私はwpf c#でこれをやっています

これまでのところ、私はこれを持っています。

    namespace BankAccounts
     {
     /// <summary>
     /// Interaction logic for MainWindow.xaml
     /// </summary>
     public partial class MainWindow : Window
     {
       public MainWindow()
    {
        InitializeComponent();
    }

    private double totalamount = 0;
    public string balance1;


    private void buttoncredit_Click(object sender, RoutedEventArgs e)
    {
        totalamount = totalamount + double.Parse(textboxamount.Text)

        balance1 = "Your Balance is: £";

        label2.Content = balance1 + totalamount;

        textboxamount.Clear();



    }

    private void buttondebit_Click(object sender, RoutedEventArgs e)
    {
        if (totalamount - double.Parse(textboxamount.Text) < 0)
        {
            MessageBox.Show("Overdraft Limit is not set please contact Customer Services");
        }

        else
        {

            totalamount = totalamount - double.Parse(textboxamount.Text);

            balance1 = " Your Balance is: £";

            label2.Content = balance1 + totalamount;



            textboxamount.Clear();
        }
    }

    private void listboxtransactions_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {



    }
}

}

4

4 に答える 4

3

の文字列はtextboxamount.Textdouble として解析できません。例外を回避するには、double.TryParse代わりに使用できます。

double amount;

if(double.TryParse(textboxamount.Text, out amount))
{
    totalamount += amount;
}

また、label2あるようでLabel、使用する必要があります

label2.Text = balance1 + totalamount;

代わりは。

于 2013-10-04T23:08:27.283 に答える
2

ユーザーがテキストボックスに double 値を正確に入力することを信頼することはできません。
入力を double に変換できない場合、Parse メソッドは例外を回避できません。
代わりに、double.TryParseメソッドは、入力された値が事実上 double であるかどうかをテストする機会を提供します。また、通貨値を扱っているようです。そのため、10 進データ型を使用し、出力文字列を作成するときに適切な書式設定を使用して、ロケールの正しい通貨文字列を取得することをお勧めします。これにより、double/single データ型に本質的に存在する丸め誤差も回避されます。

private decimal totalamount = 0;
public string balance1;

private void buttoncredit_Click(object sender, RoutedEventArgs e)
{
    decimal temp;
    if(decimal.TryParse(textboxamount.Text, out temp))
    {
        totalamount = totalamount + temp;
        balance1 = "Your Balance is: ";
        label2.Content = balance1 + totalamount.ToString("C");    
        textboxamount.Clear();

    }
    else
        MessageBox.Show("Not a valid amount");
}

private void buttondebit_Click(object sender, RoutedEventArgs e)
{
    decimal temp;
    if(decimal.TryParse(textboxamount.Text, out temp))
    {
        if (totalamount - temp < 0)
        {
             MessageBox.Show("Overdraft Limit is not set please contact Customer Services");
        }
        else
        {
             totalamount = totalamount - temp;
             balance1 = " Your Balance is: ";
             label2.Content = balance1 + totalamount.ToString("C");
             textboxamount.Clear();
        }
    }
    else
        MessageBox.Show("Not a valid amount");
}
于 2013-10-04T23:10:37.700 に答える
1

問題は、値にtextboxamount.Textdouble に変換できないものが含まれていることです。

これを処理する最善の方法は、double.TryParse代わりに次を使用することです。

private void buttoncredit_Click(object sender, RoutedEventArgs e)
{
    double newAmount;
    if(!double.TryParse(textboxamount.Text, out newAmount))
    {
        // The input is wrong - handle that
        MessageBox.Show("Please enter a valid amount");
        textboxamount.Focus();
        return;
    }

    totalamount += newAmount;
    balance1 = "Your Balance is: £";
    label2.Content = balance1 + totalamount;
    // .. Your code...
于 2013-10-04T23:08:13.163 に答える
1

このエラーの原因となる主な問題は次の 2 つです。

  • 空白や通貨文字などの追加テキスト。
  • ローカリゼーション設定が正しくないため,、 と.が反転します。

おそらく含ま,れていますが、それがエラー状態であるかどうかは覚えていません。

于 2013-10-04T23:08:56.857 に答える