2014-11-04 36 views
0

我遇到了與我的應用程序有關的問題。當計算按鈕點擊事件應根據用戶輸入的5位數郵政編碼顯示適當的運費。爲了有效,郵政編碼必須包含5位數字,前3位數字必須是「605」或「606」。 「605」的運費爲25美元,「606」爲30美元。如果郵政編碼無效,則顯示適當的信息。Visual Basic - 基於5位數的郵政編碼驗證顯示郵遞

我只要檢查郵政編碼「605」或「606」我進不到5個位數的給予零,而不是錯誤消息的價格,所以我失去了一些東西。

任何幫助或指導表示讚賞。 感謝。

Option Explicit On 
Option Strict On 
Option Infer Off 

Public Class frmMain 

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

Private Sub txtZip_Enter(sender As Object, e As EventArgs) Handles txtZip.Enter 
    txtZip.SelectAll() 
End Sub 

Private Sub txtZip_TextChanged(sender As Object, e As EventArgs) Handles txtZip.TextChanged 
    lblShipping.Text = String.Empty 
End Sub 

Private Sub btnDisplay_Click(sender As Object, e As EventArgs) Handles btnDisplay.Click 

    Dim strZip As String 
    Dim dblShipping As Double 

    strZip = txtZip.Text 

    'Make sure zip code is 5 digits 
    If strZip.Length = 5 Then 
     'Calculate the shipping based on first 3 digits 
     If strZip Like "605##" Then 
      dblShipping = 25.0 
     ElseIf strZip Like "606##" Then 
      dblShipping = 30.0 
     Else 
      MessageBox.Show("Invalid ZIP code, must be 5 digits and begin with 605 or 606") 
     End If 
    End If 

    'display shipping charge 
    lblShipping.Text = dblShipping.ToString("N2") 

End Sub 

末級

+1

現在請學習如何正確地縮進代碼,以便它不清楚的地方執行的路徑;就像現在寫的那樣,閱讀起來非常困難。 (你的'顯示運費'代碼在'if'循環之外,所以無論計算是否完成,它都會執行。) – 2014-11-04 01:10:53

回答

0

你的Else是不正確的實際上是縮進的,所以它似乎屬於外部If strZip.Lenth = 5 Then陳述,而不是內部陳述If strZip Like "505##" Then。我已編輯您的問題以糾正此縮進錯誤。

你可以看到你沒有指定當其他輸入由用戶提供的代碼路徑,並在.NET數值默認爲0聲明時(即dblShipping0.0默認值,因此,零你看到)。

我的建議是(注意,失敗的早期回報)

Dim lengthValid As Boolean = strZip.Length.Equals(5) ' this is necessary as the = operator in VB.NET does not return a boolean value 
Dim prefixValid As Boolean = strZip.StartsWith("605") OrElse strZip.StartsWith("607") 
If Not lengthValid OrElse Not prefixValid Then 
    MessageBox.Show("Invalid ZIP code, must be 5 digits and begin with 605 or 606") 
    Return 
Else 
    If strZip.StartsWith("605") Then 
     dblShipping = 25 
    Else 
     dblShipping = 30 
    End If 
End If 
+0

謝謝感謝您的幫助。我看到我在縮進中做了什麼錯誤。當我不停地移動物品並嘗試新的東西時,它從一開始就拋棄了所有東西,使它變得更糟。我瞭解當輸入其他輸入時代碼路徑出錯的位置。 – Chevygal1969 2014-11-04 14:09:30