使用函数解决Visual Basic.Net参数未指定的错误

时间:2020-06-16 03:11:24

标签: vb.net

初级Visual Basic编码器根据需要对所有代码进行了编码,但是decTotalCharges = ComputeCharges(intDays, decMCharges, decSCharges, decLabFees, decRehabFees)使我很难受-错误显示“未为“公共函数计算更改”的参数'decRehabFees'指定参数。 ...” 任何想法如何解决这个问题?或任何简化此代码的技巧?这是用于大学项目的笑声。

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

结束班级

2 个答案:

答案 0 :(得分:2)

ComputeCharges需要6个参数。您只需输入5。您需要提供第一个参数ByRef decTotalCharges As Decimal

答案 1 :(得分:0)

您在做单一工作方法方面做得很好,但我认为您有些过分。如果您的函数只有一行代码,那么传递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