1

皆さん、私のプログラムでこのクラッシュの問題が発生しています。

開始残高、与信限度額、合計料金、および合計クレジットを入力して個人の口座残高を計算するプログラムを作成しようとしています。この場合、Total Charges と Total Credits Code に特定の問題があります。

合計料金と合計クレジット ボックスが空白の場合、「~の数値を入力してください」と表示されるようにメッセージ ボックスを設定しました。問題は、実行して空白を入力すると、メッセージが表示されてプログラムがクラッシュすることです。

クラッシュ後、プログラムは特定の変換コードを黄色で強調表示します (この場合:decTotalCharges = Convert.ToDecimal(txtTotalCharges.Text))で、エラーにはInput string was not in correct format.

どうしたの、正しいフォーマットに変換したの?(10進数から10進数?)。これが私のコードの詳細です:

Public Class frmEndingBalance

'Declare module level variables
Dim mdecEndingBalance As Decimal
Dim mdecAllCharges As Decimal
Dim mdecAllCredits As Decimal
Dim mintCustomersOverLimit As Integer

Private Sub btnClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClear.Click
    'clears the form
    'clears the labels
    txtAccountNumber.Text = ""
    txtBeginningBalance.Text = ""
    txtTotalCharges.Text = ""
    txtTotalCredits.Text = ""
    txtCreditLimit.Text = ""
    lblEndingBalance.Text = ""
    lblCreditMessage.Text = ""
    lblAllCharges.Text = ""
    lblAllCredits.Text = ""
    lblCustomersOverLimit.Text = ""
    lblCreditMessage.Text = ""

    'clear the textboxes
    txtAccountNumber.Clear()
    txtBeginningBalance.Clear()
    txtTotalCredits.Clear()
    txtTotalCharges.Clear()
    txtCreditLimit.Clear()

    'clear module level variables
    mdecEndingBalance = 0
    mdecAllCharges = 0
    mdecAllCredits = 0
    mintCustomersOverLimit = 0
End Sub

Private Sub btnCalculate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalculate.Click

    'Declare Variables
    Dim intAccountNumber As Integer
    Dim intBeginningBalance As Integer
    Dim decTotalCharges As Decimal
    Dim decTotalCredits As Decimal
    Dim decCreditLimit As Decimal
    Dim mdecEndingBalance As Decimal 'Beginning Balance + Charges - Credits()
    Dim decCreditMessage As Decimal

    'check for numeric
    If IsNumeric(txtAccountNumber.Text) = False Then 'value is not numeric
        MessageBox.Show("You can't enter anything blank!")
        Exit Sub
    End If

    'convert to a numeric data type
    intAccountNumber = Convert.ToInt32(txtAccountNumber.Text)

    'check for numeric
    If String.IsNullOrEmpty(txtBeginningBalance.Text) Then MessageBox.Show("Beginning Balance Cannot Be Blank!")

    'check for everything else
    If IsNumeric(txtBeginningBalance.Text) = False Then 'Value is not numeric
        MessageBox.Show("Please enter a numeric value for Beginning Balance!")
        Exit Sub
    End If
    'convert to a numeric data type
    intBeginningBalance = Convert.ToInt32(txtBeginningBalance.Text)

    'check for numeric
    If IsNumeric(txtTotalCharges.Text) = False Then 'value is not numeric
        MessageBox.Show("Please enter a numeric value for Total Charges!")
    End If

    'convert 
    decTotalCharges = Convert.ToDecimal(txtTotalCharges.Text)

    'check for 0 or positive
    If decTotalCharges < 0 Then
        MessageBox.Show("Please enter a positive value or zero for number of Total Charges!")
        Exit Sub
    End If

    'check for numeric
    If IsNumeric(txtTotalCredits.Text) = False Then 'value is not numeric 
        MessageBox.Show("Please enter a numeric value for Total Credits")
    End If

    'convert to a numeric data type
    decTotalCredits = Convert.ToDecimal(txtTotalCredits.Text)


    'check for 0 or positive
    If decTotalCredits < 0 Then
        MessageBox.Show("Please enter a positive value or zero for total credits!")
    End If

    'check numeric
    If IsNumeric(txtCreditLimit.Text) = False Then 'value is not numeric
        MessageBox.Show("Please enter a numeric value for the Credit Limit!")
    End If

    'convert to a numeric data type
    decCreditLimit = Convert.ToDecimal(txtCreditLimit.Text)


    'check for a 0 or positive
    If decCreditLimit < 0 Then
        MessageBox.Show("Please enter a positive value or zero for Credit Limit!")
    End If

    'check for customers over limit
    decCreditMessage = decCreditLimit - (mdecEndingBalance)

    'running totals
    mdecAllCharges += decTotalCharges
    mdecAllCredits += decTotalCredits

    'calculate Ending Balance
    mdecEndingBalance = Convert.ToDecimal(intBeginningBalance + decTotalCharges - (decTotalCredits))

    'display outputs
    lblEndingBalance.Text = mdecEndingBalance.ToString("c")
    lblAllCharges.Text = mdecAllCharges.ToString("c")
    lblAllCredits.Text = mdecAllCredits.ToString("c")
    lblCustomersOverLimit.Text = mintCustomersOverLimit.ToString("n0")
End Class

どんな助けでも大歓迎です!

ありがとう

4

1 に答える 1

0

Exit Sub をテストから逃しました

If IsNumeric(txtTotalCharges.Text) = False Then 'value is not numeric
 MessageBox.Show("Please enter a numeric value for Total Charges!")
End If

他のいくつかの場所でもそれを行いました (私たち全員がそうであり、実際には私たち全員がそうしています :( )。小さなヘルパー メソッドまたは類似のものでリファクタリングする価値があります。

If IsValidDecimal(txtTotalCharges.Text, "Total Charges") 
  ' etc
End If
于 2012-09-23T21:23:22.833 に答える