Решение Visual Basi c. Net аргумент не указан ошибка с функцией - PullRequest
0 голосов
/ 16 июня 2020

визуальная основа для начинающих c кодировщик ввел весь код, если необходимо, но decTotalCharges = ComputeCharges(intDays, decMCharges, decSCharges, decLabFees, decRehabFees) доставляет мне неудобства - отображается ошибка, в которой говорится: «Аргумент не указан для параметра 'decRehabFees'». Publi c Функция Вычислить изменения ... "Есть идеи, как это исправить? Или какие-нибудь советы по упрощению этого кода? Это для проекта колледжа, смеется".

Option Strict 
Public Class Form1
   Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click
    'Declare variables
    Dim intDays As Integer
    Dim decMCharges As Decimal
    Dim decSCharges As Decimal
    Dim decLabFees As Decimal
    Dim decRehabFees As Decimal
    Dim decTotalCharges As Decimal
    Dim decTax As Decimal
    Dim decTotal As Decimal

    Try
        GetInfo(intDays, decMCharges, decSCharges, decLabFees, decRehabFees)
        decTotalCharges = ComputeCharges(intDays, decMCharges, decSCharges, decLabFees, decRehabFees)
        decTax = ComputeTax(decTotalCharges, decTax)
        decTotal = ComputeTotal(decTotalCharges, decTax, decTotal)
        Display(decTotalCharges, decTax, decTotal)
    Catch ex As Exception

    End Try
End Sub
Sub GetInfo(ByRef intDays As Integer, ByRef decMCharges As Decimal, ByRef decSCharges As Decimal, ByRef decLabFees As Decimal, ByRef decRehabFees As Decimal)
    'Recieves values
    intDays = CInt(txtDays.Text)
    decMCharges = CDec(txtMCharges.Text)
    decSCharges = CDec(txtSCharges.Text)
    decLabFees = CDec(txtLabFees.Text)
    decRehabFees = CDec(txtRehabFees.Text)
End Sub
Function ComputeCharges(ByRef decTotalCharges As Decimal, ByVal intDays As Integer, ByVal decMCharges As Decimal, ByVal decSCharges As Decimal, ByVal decLabFees As Decimal, ByVal decRehabFees As Decimal) As Decimal
    'GetInfo(intDays, decMCharges, decSCharges, decLabFees, decRehabFees)
    decTotalCharges = CDec(intDays * 300) + decMCharges + decSCharges + decLabFees + decRehabFees
End Function
Function ComputeTax(ByVal decTotalCharges As Decimal, ByRef decTax As Decimal) As Decimal
    decTax = CDec(decTotalCharges * 0.07)
End Function
Function ComputeTotal(ByVal decTotalCharges As Decimal, ByVal decTax As Decimal, ByRef decTotal As Decimal) As Decimal
    decTotal = decTotalCharges + decTax
End Function
Function Display(ByVal decTotalCharges As Decimal, ByVal decTax As Decimal, ByVal decTotal As Decimal) As String
    lblTax.Text = decTax.ToString("c")
    lblTotal.Text = decTotal.ToString("c")
    lblTotalCharges.Text = decTotalCharges.ToString("c")
End Function

End Class

Ответы [ 2 ]

2 голосов
/ 16 июня 2020

ComputeCharges ожидает 6 аргументов. Вы кормите его только 5. Необходимо указать первый аргумент ByRef decTotalCharges As Decimal.

0 голосов
/ 16 июня 2020

Вы хорошо поработали над методами одиночной работы, но я думаю, что вы немного переборщили. Если ваша функция имеет только одну строку кода, тогда нет особого смысла передавать параметры ByRef. Я хотел бы увидеть код проверки в событии Validating текстовых полей. Не полагайтесь на обработку исключений для обработки предотвратимых исключений.

.TryParse возвращает логическое значение и заполняет переменную, предоставленную с правильным типом данных.

Когда вы действительно используете функции в. net , им нужен тип возврата и оператор Return, соответствующий типу функции.

Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click
    'Validate user input
    Dim intDays As Integer
    If Not Integer.TryParse(txtDays.Text, intDays) Then
        MessageBox.Show("Fill in Days with a number")
        Exit Sub
    End If
    Dim decMCharges As Decimal
    If Not Decimal.TryParse(txtMCharges.Text, decMCharges) Then
        MessageBox.Show("Fill in MCharges with a number")
        Exit Sub
    End If
    Dim decSCharges As Decimal
    If Not Decimal.TryParse(txtSCharges.Text, decSCharges) Then
        MessageBox.Show("Fill in SCharges with a number")
        Exit Sub
    End If
    Dim decLabFees As Decimal
    If Not Decimal.TryParse(txtLabFees.Text, decLabFees) Then
        MessageBox.Show("Fill in LabFees with a number")
        Exit Sub
    End If
    Dim decRehabFees As Decimal
    If Not Decimal.TryParse(txtRehabFees.Text, decRehabFees) Then
        MessageBox.Show("Fill in RehabFees with a number")
        Exit Sub
    End If
    'Compute charges
    Dim decTotalCharges As Decimal
    Dim decTax As Decimal
    Dim decTotal As Decimal
    decTotalCharges = intDays * 300 + decMCharges + decSCharges + decLabFees + decRehabFees
    decTax = decTotalCharges * 0.07D
    decTotal = decTotalCharges + decTax
    'Display
    lblTax.Text = decTax.ToString("c")
    lblTotal.Text = decTotal.ToString("c")
    lblTotalCharges.Text = decTotalCharges.ToString("c")
End Sub
...