2013-11-15 65 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,始终查找的文档。