2013-11-15 66 views
0

繼承人vb.net中的位圖圖像保存代碼片段。有人可以幫我理解爲什麼我在這裏得到一個錯誤,指出我想在保存圖像時將字符串轉換爲double。如何糾正?vb.net中的類型轉換錯誤

Private Sub Timer5_Tick(sender As System.Object, e As System.EventArgs) Handles Timer5.Tick 
      x = MyRandomNumber.Next(1000) 
      screenWidth = Screen.GetBounds(New Point(0, 0)).Width 
      screenHeight = Screen.GetBounds(New Point(0, 0)).Height 
      Dim bmpScreenShot As New Bitmap(screenWidth, screenHeight) 
      Dim gfx As Graphics = Graphics.FromImage(bmpScreenShot) 
      gfx.CopyFromScreen(0, 0, 0, 0, New Size(screenWidth, screenHeight)) 
     ***bmpScreenShot.Save("D:\\screenshots\\" + x + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg)*** 
    End Sub 
+0

修復了轉換問題後,您可能希望將雙斜槓'\\'更改爲單斜槓'\'...因爲只有C#中需要雙重斜槓,而不是VB.NET – freefaller

回答

1
bmpScreenShot.Save("D:\\screenshots\\" + x.ToString() + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg) 
1

使用&,而不是+來連接的路徑:

bmpScreenShot.Save("D:\\screenshots\\" & x & ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg) 
3

"D:\\screenshots\\"是字符串。 x是一個雙。

您嘗試添加"D:\\screenshots\\"x,並且此操作失敗,因爲"D:\\screenshots\\"不是雙精度型。

這就是編譯器試圖告訴你的。


看一看在+ operator的文檔:

一般情況下,+可能的情況下執行算術加法,並連接只有當兩個表達式都是字符串。

表達式的數據類型:

對象表達式成立的數值,另一個是String類型由編譯器

操作:

如果Option Strict爲On,然後生成編譯器錯誤。

如果Option Strict爲Off,則將該字符串隱式轉換爲Double並添加。

如果字符串不能轉換爲Double,則拋出InvalidCastException異常。


連接字符串使用& operator

生成兩個表達式的字符串連接。

... "D:\\screenshots\\" & x & ".jpg"... 

String.Format

String.Format("D:\\screenshots\\{0}.jpg", x) 

教訓:

始終使用Option Strict On,始終查找的文檔。