Как мне исправить ошибку приведения в vb.net? - PullRequest
1 голос
/ 12 сентября 2011

Я пытаюсь поймать ошибку System.InvalidCastException. Если я введу число в калькулятор, программа запустится нормально. Если в текстовых полях ничего не нажимается кнопка «Рассчитать», я получаю ошибку приведения Conversion from string "" to type 'Decimal' is not valid. Я понимаю, почему я получаю ошибку. Я не знаю, что с этим делать. Я хочу, чтобы программа сбросила нулевые данные и вернулась к ожиданию ввода от пользователя. Спасибо

Private Sub btnCalculate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalculate.Click
  Dim FedTaxRate = 0.13     ' constants for taxes and work week
  Dim StateTaxRate = 0.07
  Dim StandWorkWeek = 40
  Dim GrossPay As Decimal    ' variables
  Dim NetPay As Decimal


  If txtInWage.Text = "" Then
      MessageBox.Show("Please enter a number in the wage box", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
  End If


  If txtInHours.Text = "" Then
      MessageBox.Show("Please enter a number in the hours box", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
  End If

  Dim decInHours = CDec(txtInHours.Text) 'converts text boxes to numerical data
  Dim decInWage = CDec(txtInWage.Text)


  If decInHours <= StandWorkWeek Then        'calculates gross and net pay as well as taxes. Also includes overtime after 40 hours
    GrossPay = (decInHours * decInWage)
  ElseIf decInHours > StandWorkWeek Then
    GrossPay = (decInWage * StandWorkWeek) + (decInHours - StandWorkWeek) * (decInWage * 1.5)
  End If

  NetPay = GrossPay - (GrossPay * FedTaxRate) - (GrossPay * StateTaxRate)

  lblGrossPay.Text = GrossPay.ToString("c")
  lblNetPay.Text = NetPay.ToString("c")
  lblFedTax.Text = (GrossPay * FedTaxRate).ToString("c")
  lblStateTax.Text = (GrossPay * StateTaxRate).ToString("C")


End Sub

Ответы [ 2 ]

1 голос
/ 12 сентября 2011

Если вы получаете ввод от TextBox, то, возможно, пользователь может вводить буквы, в этом случае CDec также не удастся.

Вы можете использовать Decimal.TryParse вместо.

Dim decInHours As Decimal
Dim decInWage As Decimal    
If Not Decimal.TryParse(txtInHours.Text, decInHours) Then
        MessageBox.Show("Please enter a number in the hours box", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
        Exit Sub ' As in answer from Fredou.
End If

If Not Decimal.TryParse(txtInWage.Text, decInWage) Then
        MessageBox.Show("Please enter a number in the wage box", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
        Exit Sub ' As in answer from Fredou.
End If
1 голос
/ 12 сентября 2011

вы можете сделать

If txtInWage.Text = "" Then
    MessageBox.Show("Please enter a number in the wage box", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
    exit sub
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...