2012-08-11 43 views
-1

Error Image解析文本框時

好了,上面的鏈接會顯示您獲得無效轉換異常,但我有一些文本框,當數字輸入,它們都自動總結,並顯示在一個單獨的盒子總和。這是我的代碼爲文本框,總和顯示在:

Try 
     Dim One As Integer 
     Dim two As Integer 
     Dim three As Integer 
     Dim four As Integer 
     Dim five As Integer 
     Dim six As Integer 
     Dim seven As Integer 
     If CDbl(txtMon1.Text) > 24 Then 
      MsgBox(Title:="Error", Prompt:="There not more than 24 hours a day.") 
     ElseIf CDbl(txtTues1.Text) > 24 Then 
      MsgBox(Title:="Error", Prompt:="There not more than 24 hours a day.") 
     ElseIf CDbl(txtWed1.Text) > 24 Then 
      MsgBox(Title:="Error", Prompt:="There not more than 24 hours a day.") 
     ElseIf CDbl(txtThurs1.Text) > 24 Then 
      MsgBox(Title:="Error", Prompt:="There not more than 24 hours a day.") 
     ElseIf CDbl(txtFri1.Text) > 24 Then 
      MsgBox(Title:="Error", Prompt:="There not more than 24 hours a day.") 
     ElseIf CDbl(txtSat1.Text) > 24 Then 
      MsgBox(Title:="Error", Prompt:="There not more than 24 hours a day.") 
     ElseIf CDbl(txtSun1.Text) > 24 Then 
      MsgBox(Title:="Error", Prompt:="There not more than 24 hours a day.") 
     ElseIf String.IsNullOrEmpty(txtMon1.Text) Then 
      One = CInt(0) 
      two = CInt(0) 
      three = CInt(0) 
      four = CInt(0) 
      five = CInt(0) 
      six = CInt(0) 
      seven = CInt(0) 
     ElseIf Not IsNumeric(txtMon1.Text) Then 
      One = CInt(0) 
      two = CInt(0) 
      three = CInt(0) 
      four = CInt(0) 
      five = CInt(0) 
      six = CInt(0) 
      seven = CInt(0) 
     Else 
      One = CInt(Convert.ToInt64(txtMon1.Text)) 
      two = CInt(Convert.ToInt64(txtTues1.Text)) 
      three = CInt(Convert.ToInt64(txtWed1.Text)) 
      four = CInt(Convert.ToInt64(txtThurs1.Text)) 
      five = CInt(Convert.ToInt64(txtFri1.Text)) 
      six = CInt(Convert.ToInt64(txtSat1.Text)) 
      seven = CInt(Convert.ToInt64(txtSun1.Text)) 
      txtTot1.Text = CStr(Math.Round(One + two + three + four + five + six + seven)) 
     End If 
    Catch ex As Exception 
     MsgBox(ex.ToString) 
    End Try 
End Sub 

Private Sub txtTot2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTot2.TextChanged, txtMon2.TextChanged, txtTues2.TextChanged, txtWed2.TextChanged, txtThurs2.TextChanged, txtFri2.TextChanged, txtSat2.TextChanged, txtSun2.TextChanged 
    Try 
     Dim One As Integer 
     Dim two As Integer 
     Dim three As Integer 
     Dim four As Integer 
     Dim five As Integer 
     Dim six As Integer 
     Dim seven As Integer 
     If CDbl(txtMon2.Text) > 24 Then 
      MsgBox(Title:="Error", Prompt:="There not more than 24 hours a day.") 
     ElseIf CDbl(txtTues2.Text) > 24 Then 
      MsgBox(Title:="Error", Prompt:="There not more than 24 hours a day.") 
     ElseIf CDbl(txtWed2.Text) > 24 Then 
      MsgBox(Title:="Error", Prompt:="There not more than 24 hours a day.") 
     ElseIf CDbl(txtThurs2.Text) > 24 Then 
      MsgBox(Title:="Error", Prompt:="There not more than 24 hours a day.") 
     ElseIf CDbl(txtFri2.Text) > 24 Then 
      MsgBox(Title:="Error", Prompt:="There not more than 24 hours a day.") 
     ElseIf CDbl(txtSat2.Text) > 24 Then 
      MsgBox(Title:="Error", Prompt:="There not more than 24 hours a day.") 
     ElseIf CDbl(txtSun2.Text) > 24 Then 
      MsgBox(Title:="Error", Prompt:="There not more than 24 hours a day.") 
     ElseIf String.IsNullOrEmpty(txtMon2.Text) Then 
      One = CInt(0) 
      two = CInt(0) 
      three = CInt(0) 
      four = CInt(0) 
      five = CInt(0) 
      six = CInt(0) 
      seven = CInt(0) 
     ElseIf Not IsNumeric(txtMon2.Text) Then 
      One = CInt(0) 
      two = CInt(0) 
      three = CInt(0) 
      four = CInt(0) 
      five = CInt(0) 
      six = CInt(0) 
      seven = CInt(0) 
     Else 
      One = CInt(Convert.ToInt64(txtMon2.Text)) 
      two = CInt(Convert.ToInt64(txtTues2.Text)) 
      three = CInt(Convert.ToInt64(txtWed2.Text)) 
      four = CInt(Convert.ToInt64(txtThurs2.Text)) 
      five = CInt(Convert.ToInt64(txtFri2.Text)) 
      six = CInt(Convert.ToInt64(txtSat2.Text)) 
      seven = CInt(Convert.ToInt64(txtSun2.Text)) 
      txtTot2.Text = CStr(Math.Round(One + two + three + four + five + six + seven)) 
     End If 
    Catch ex As Exception 
     MsgBox(ex.ToString) 
    End Try 

我在做什麼錯?

回答

0

您需要檢查,如果文本框爲空或空你檢查前如果值是> 24

+0

感謝您的答覆。我嘗試交換代碼,但錯誤仍然出現。你能想到別的嗎?另外,爲什麼我不斷得到消極代表? – Shinobi1173 2012-08-11 15:03:26

+0

圖像中的錯誤說,你正在試圖解析一個空字符串(「」),以及明顯不分析。如果你先檢查null或空,這不應該發生。您還應該檢查以確保該字符串本質上是數字。另一個答案提到,你應該使用TryParse(),如果它是可解析的,它將返回true或false。 – brianestey 2012-08-11 15:15:31

1

你真的應該使用那些字符串轉換爲數字Integer.TryParse(...)Double.TryParse(...)

例子:

Dim One As Integer = 0 
If Not Integer.TryParse(txtMon1.Text, One) Then 
    MessageBox.Show("Invalid Entry") 
End If 

此行毫無意義:

One = CInt(Convert.ToInt64(txtMon2.Text)) 

如果你只是讀它,它說:「我轉換成整數轉換成整數64此字符串」。

之前您必須驗證字符串的內容,您可以使用可轉換爲數字。這就是TryParse(...)會適合你的地方。

+0

嗯,我試圖改變convert.toint64到integer.tryparse,但我得到一個錯誤說「重載決策失敗,因爲沒有可訪問‘的TryParse’接受此數目的參數。」 – Shinobi1173 2012-08-11 15:05:28

+0

O等待....堅持 – Shinobi1173 2012-08-11 15:05:57

+0

好吧,我想拋出,如果你聲明我所有的if語句的最頂端提供。錯誤仍在發生。我是否需要更改所有if語句? – Shinobi1173 2012-08-11 15:09:54

0

怎麼樣的東西乾淨和簡單,如:

 Dim hours() As Integer = {txtMon1.Text.Trim.Length, txtTue1.Text.Trim.Length, txtWed1.Text.Trim.Length, txtThurs1.Text.Trim.Length, txtFri1.Text.Trim.Length, txtSat1.Text.Trim.Length, txtSun1.Text.Trim.Length} 
    If hours.Min > 0 Then 
     Dim hoursval() As Integer = {Convert.ToInt16(txtMon1.Text), Convert.ToInt16(txtTue1.Text), Convert.ToInt16(txtWed1.Text), Convert.ToInt16(txtThurs1.Text), Convert.ToInt16(txtFri1.Text), Convert.ToInt16(txtSat1.Text), Convert.ToInt16(txtSun1.Text)} 
     If hoursval.Max > 24 Then 
      MsgBox("There cannot be more than 24 hours in a day", MsgBoxStyle.OkOnly) 
     End If 
    End If 

沒有測試,但它應該工作!

我忘了補充 - 這是除了使用的TryParse別人的建議。檢查空白字符串是用戶常見的事情,這需要照顧,沒有太多的開銷。