none
VB 2010 經常遇到InvalidCasteException RRS feed

  • 問題

  • 用VB 2010寫程式時經常遇到

    {InvalidCasteException未楚理}

    請問這是什麼意思

    Public Class Form1
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        TextBox5.Text = TextBox1.Text * TextBox3.Text
        TextBox6.Text = TextBox2.Text * TextBox4.Text
        Dim a, b, c As Long
        a = Val(TextBox5.Text)
        b = Val(TextBox6.Text)
        Do Until b = 0
          c = a Mod b
          a = b
          b = c
        Loop
        TextBox5.Text = (TextBox5.Text / a)
        TextBox6.Text = (TextBox6.Text / a)
      End Sub
    
      Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        TextBox11.Text = TextBox7.Text * TextBox10.Text
        TextBox12.Text = TextBox8.Text * TextBox9.Text
        Dim a, b, c As Long
        a = Val(TextBox11.Text)
        b = Val(TextBox12.Text)
        Do Until b = 0
          c = a Mod b
          a = b
          b = c
        Loop
        TextBox11.Text = (TextBox11.Text / a)
        TextBox12.Text = (TextBox12.Text / a)
      End Sub
    End Class
    

    我的程式碼如上

    是有關算出{分數}的程式

    還有 我的Help代理適服器壞了不知為什麼

    打開就說我沒安裝Help代理適服器 或 意外結束關閉找不到此網頁

    為什麼會這樣??

    2010年11月29日 下午 01:02

解答

  • 這是一個需要提醒使用VB.NET初學者的地方.

    雖然VB.NET具備了某種程度自動轉型的功能, 但最好養成強型別的習慣

    類似你以下這樣的寫法, 事實上是一種不好的習慣

        TextBox5.Text = TextBox1.Text * TextBox3.Text
        TextBox6.Text = TextBox2.Text * TextBox4.Text
    當你要將TextBox的Text屬性 (事實上這個屬性的型別是String) 拿來當數值運算時, 你有幾件事要做

    (1) 檢查該Text屬性值是否真的能轉型為數值

    (2) 宣告一些數值變數 (依據你的需求有可能會是Integer, Long, 甚至Double, Decimal等等), 來儲存轉型後的數值

    (3) 要注意的是當四則運算後, 原有的型別未必能容納結果, ex: Integer 乘以 Integer的結果有可能超出Integer的範圍. 這也是型別設定該注意的地方

    (4) 請參考 [運算子結果的資料型別 ]

     


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    • 已提議為解答 91MVP 2010年11月30日 下午 01:01
    • 已標示為解答 璉璉Moderator 2010年12月4日 上午 07:39
    2010年11月29日 下午 01:39
    版主
  • VS2010 Help 的安裝可以看這篇:

    [VS2010]MSDN Library for Visual Studio 2010 的安裝與小評


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年11月30日 下午 02:58

所有回覆

  • 型別轉換函式

    http://msdn.microsoft.com/zh-tw/library/s2dy91zy(VS.80).aspx

    要把字串型態轉成數字型態,字串無法做數值運算...


    2010年11月29日 下午 01:29
  • 這是一個需要提醒使用VB.NET初學者的地方.

    雖然VB.NET具備了某種程度自動轉型的功能, 但最好養成強型別的習慣

    類似你以下這樣的寫法, 事實上是一種不好的習慣

        TextBox5.Text = TextBox1.Text * TextBox3.Text
        TextBox6.Text = TextBox2.Text * TextBox4.Text
    當你要將TextBox的Text屬性 (事實上這個屬性的型別是String) 拿來當數值運算時, 你有幾件事要做

    (1) 檢查該Text屬性值是否真的能轉型為數值

    (2) 宣告一些數值變數 (依據你的需求有可能會是Integer, Long, 甚至Double, Decimal等等), 來儲存轉型後的數值

    (3) 要注意的是當四則運算後, 原有的型別未必能容納結果, ex: Integer 乘以 Integer的結果有可能超出Integer的範圍. 這也是型別設定該注意的地方

    (4) 請參考 [運算子結果的資料型別 ]

     


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    • 已提議為解答 91MVP 2010年11月30日 下午 01:01
    • 已標示為解答 璉璉Moderator 2010年12月4日 上午 07:39
    2010年11月29日 下午 01:39
    版主
  • 謝謝版大的回答,但我把它改成:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Log1, Log2, Log3, Log4 As Long
        Dim Dou1, Dou2, Dou3, Dou4 As Double
        Log1 = TextBox1.Text
        Log2 = TextBox2.Text
        Log3 = TextBox3.Text
        Log4 = TextBox4.Text
        TextBox5.Text = TextBox1.Text * TextBox3.Text
        TextBox6.Text = TextBox2.Text * TextBox4.Text
        Log1 = CDbl(Dou1)
        Log2 = CDbl(Dou2)
        Log3 = CDbl(Dou3)
        Log4 = CDbl(Dou4)
        Dim a, b, c As Long
        a = Val(TextBox5.Text)
        b = Val(TextBox6.Text)
        Do Until b = 0
          c = a Mod b
          a = b
          b = c
        Loop
        TextBox5.Text = (TextBox5.Text / a)
        TextBox6.Text = (TextBox6.Text / a)
      End Sub
    
      Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Log1, Log2, Log3, Log4 As Long
        Dim Dou1, Dou2, Dou3, Dou4 As Double
        Log1 = TextBox1.Text
        Log2 = TextBox2.Text
        Log3 = TextBox3.Text
        Log4 = TextBox4.Text
        TextBox11.Text = TextBox7.Text * TextBox10.Text
        TextBox12.Text = TextBox8.Text * TextBox9.Text
        Log1 = CDbl(Dou1)
        Log2 = CDbl(Dou2)
        Log3 = CDbl(Dou3)
        Log4 = CDbl(Dou4)
        Dim a, b, c As Long
        a = Val(TextBox11.Text)
        b = Val(TextBox12.Text)
        Do Until b = 0
          c = a Mod b
          a = b
          b = c
        Loop
        TextBox11.Text = (TextBox11.Text / a)
        TextBox12.Text = (TextBox12.Text / a)
      End Sub
    End Class
    
    還是一樣的問題.....
    2010年11月30日 下午 12:16
  •         Log1 = CLng(TextBox1.Text)
            Log2 = CLng(TextBox2.Text)
            Log3 = CLng(TextBox3.Text)
            Log4 = CLng(TextBox4.Text)
            TextBox5.Text = CStr(CLng(TextBox1.Text) * CLng(TextBox3.Text))
            TextBox6.Text = CStr(CLng(TextBox2.Text) * CLng(TextBox4.Text))
    
            TextBox5.Text = CStr(CDbl(TextBox5.Text) / a)
            TextBox6.Text = CStr(CDbl(TextBox6.Text) / a)
    


    2010年11月30日 下午 12:34
  • 承Joe大的程式碼. 補充

    既然你都把String轉型成Long或Double, 怎又拿String來運算 ? 當然是要像Joe大這樣的寫法, 用你轉型後的變數來運算.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2010年11月30日 下午 01:08
    版主
  • VS2010 Help 的安裝可以看這篇:

    [VS2010]MSDN Library for Visual Studio 2010 的安裝與小評


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年11月30日 下午 02:58
  • 很感謝你的回答

    help代理正常了

    2010年12月1日 下午 01:43