2016-11-16 31 views
1

我是编程新手,刚刚将我的专业从EE转换到IT - 在使用Visual Basic函数时遇到问题。我认为我的错误是在函数声明的某个地方,但我不完全确定。该程序应该使医院所花的时间乘以我声明的常数= 350,并将所有杂项费用加到该数字中,但是我返回0.任何人都可以帮助我发现错误吗?Visual Basic函数的变量声明中的错误

Visual Basic代码:

Const decStay_Rate As Decimal = 350 

    Private decLength As Integer 
    Private decMedication As Decimal 
    Private decSurgical As Decimal 
    Private decLab As Decimal 
    Private decPhysical As Decimal 
    Private decTotalStayPrice As Decimal 
    Private decTotalMiscCharges As Decimal 

    Private decTotal As Decimal 
    Dim decStay As Decimal 


    Function validateInputField() As Boolean 
     If Not Decimal.TryParse(txtLength.Text, decLength) Then 
      MessageBox.Show("Stay Length must be numeric") 
     End If 
     If Not Decimal.TryParse(txtMedication.Text, decMedication) Then 
      MessageBox.Show("Medication cost must be numeric") 
     End If 
     If Not Decimal.TryParse(txtSurgical.Text, decSurgical) Then 
      MessageBox.Show("Surgical cost must be numeric") 
     End If 
     If Not Decimal.TryParse(txtLabFees.Text, decLab) Then 
      MessageBox.Show("Lab fees must be numeric") 
     End If 
     If Not Decimal.TryParse(txtPhysicalRehab.Text, decPhysical) Then 
      MessageBox.Show("Physical Rehab cost must be numeric") 
     End If 

     Return True 
    End Function 

    Function CalcStayCharges(ByVal decLength As Decimal) As Decimal 
     Dim decTotalStayPrice As Decimal 
     decTotalStayPrice = decLength * decStay_Rate 
     Return decTotalStayPrice 
    End Function 

    Function CalcMiscCharges(ByVal decmedication As Decimal, ByVal decsurgical As Decimal, ByVal decLab As Decimal, ByVal decPhysical As Decimal) As Decimal 
     Dim decTotalMiscCharges As Decimal 
     decTotalMiscCharges = decmedication + decsurgical + decLab + decPhysical 
     Return decTotalMiscCharges 
    End Function 

    Private Function CalcTotalCharges(ByVal decTotalStayPrice As Decimal, ByVal decTotalMiscCharges As Decimal) As Decimal 
     Dim decTotalCharge As Decimal 
     decTotalCharge = decTotalStayPrice + decTotalMiscCharges 
     Return decTotalCharge 
    End Function 
    Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click 

     txtLabFees.Text = String.Empty 
     txtLength.Text = String.Empty 
     txtMedication.Text = String.Empty 
     txtPhysicalRehab.Text = String.Empty 
     txtSurgical.Text = String.Empty 

    End Sub 

    Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click 
     Me.Close() 
    End Sub 

    Private Sub btnCalc_Click(sender As Object, e As EventArgs) Handles btnCalc.Click 
     Dim decTotal As Decimal 

     lblOutput.Text = String.Empty 
     If validateInputField() Then 
      decTotal = CalcTotalCharges(decTotalStayPrice, decTotalMiscCharges) 

      lblOutput.Text = decTotal.ToString("c") 
     End If 
    End Sub 

感谢, 埃里克

+0

欢迎埃里克。正如你在vba标签描述中看到的那样,VBA和VB.NET不是等价的。 –

+0

谢谢,我纠正了这个问题 –

+0

在代码中放置一个断点(点击左边的空白处,得到一个红色的点)然后继续。您可以将鼠标指针悬停在变量上以获取其当前值。 – peterG

回答

0

首先你不需要Decimal.TryParse(txtLength.Text, decLength)来检查它是否是数字。你可以使用IsNumeric,所以IsNumeric(txtLength.Text)。如果成功,Decimal.TryParse会将值从txtLength.Text分配到decLength,但您不需要在您的情况下执行此操作。因为它们给你造成混乱

Function validateInputField() As Boolean 
    If Not IsNumeric(txtLength.Text) Then 
     MessageBox.Show("Stay Length must be numeric") 
     Return False 
    End If 
    If Not IsNumeric(txtMedication.Text) Then 
     MessageBox.Show("Medication cost must be numeric") 
     Return False 
    End If 
    If Not IsNumeric(txtSurgical.Text) Then 
     MessageBox.Show("Surgical cost must be numeric") 
     Return False 
    End If 
    If Not IsNumeric(txtLabFees.Text) Then 
     MessageBox.Show("Lab fees must be numeric") 
     Return False 
    End If 
    If Not IsNumeric(txtPhysicalRehab.Text) Then 
     MessageBox.Show("Physical Rehab cost must be numeric") 
     Return False 
    End If 

    Return True 
End Function 

我删除了所有这些:

我会改变方法validateInputField

Private decLength As Integer 
Private decMedication As Decimal 
Private decSurgical As Decimal 
Private decLab As Decimal 
Private decPhysical As Decimal 
Private decTotalStayPrice As Decimal 
Private decTotalMiscCharges As Decimal 

Private decTotal As Decimal 
Dim decStay As Decimal 

然后您想要通过正确的价值观,以方法CalcTotalCharges

decTotal = CalcTotalCharges(value1, value2) 

在一个迂回的方式你一个重新可能后:

Private Sub btnCalc_Click(sender As Object, e As EventArgs) Handles btnCalc.Click 
    Dim decTotal As Decimal 

    lblOutput.Text = "" 
    If validateInputField() Then 
     decTotal = CalcTotalCharges(CalcStayCharges(CDec(txtLength.Text)), CalcMiscCharges(CDec(txtMedication.Text), CDec(txtSurgical.Text), CDec(txtLabFees.Text), CDec(txtPhysicalRehab.Text))) 

     lblOutput.Text = decTotal.ToString("c") 
    End If 
End Sub 
+1

修好了,谢谢。错误是在我忘记布尔函数和我的代码在按钮 –

+0

返回false没有问题。很高兴你对它进行了排序。 – Bugs