在我的图片资源中,我有以下名称的图片:c1.png,c2.png,c3.png,...
而引用第一张图片的方法是My.Resources.c1
我想在这样的循环中显示它们
For i = 1 To numberOfPictures
Dim tmpPicture As New PictureBox
tmpPicture.Image = cstr(My.Resources.c) & cstr(i) & ".png"
next
现在这当然不起作用,因为string无法转换为System.Drawing.Image。 任何想法如何解决这个问题?我知道在VB中我很容易这样做:
For i = 1 To numberOfPictures
imgName.Picture = loadPicture(ThisWorkbook.Path & "\picturesfolder\" & CStr(i) & ".png")
next i
答案 0 :(得分:2)
是的,你可以这样做:
tmpPicture.Image = DirectCast(My.Resources.ResourceManager.GetObject("c" & CStr(i) & ".png"), Bitmap)
这是一个提示。有时查看设计器代码非常有用。如果右键单击My.Resources.c1
并选择转到定义选项,您将看到访问该属性时实际执行的代码。显然,c1
属性不是作为.NET框架的一部分构建的。它是Designer文件中的自动生成属性。资源设计器屏幕会自动为您生成该代码。
答案 1 :(得分:1)
你必须将你想要的图像循环到一个集合中,然后你可以对集合进行for循环。
看起来像这样:
Dim bmpCol As New Collection(Of Bitmap)
bmpCol.Add(My.Resources.c1)
bmpCol.Add(My.Resources.c2)
'etc
Dim doCycle As Boolean = True
While doCycle
For Each bmp As Bitmap In bmpCol
tmpPicture.Image = bmp
Next
End While
您可以全局定义集合,并在构造函数中将图像添加到集合中。
您还可以查看My.Resources.ResourceManager。目前我不确定它是否提供了所需的功能......
编辑:嗯,请参阅 Steven Doggart 帖子
答案 2 :(得分:0)
试试这个:
For i = 1 To numberOfPictures
Dim tmpPicture As New PictureBox
Dim objImage = DirectCast(My.Resources.ResourceManager.GetObject("c" & i), Bitmap)
tmpPicture.Image = objImage
Next
这是非常不言自明的,但基本上,你只是使用GetObject
单例实例的ResourceManager
方法在运行时动态返回你指定的资源,而不是像往常一样引用它们在设计时通过静态引用(例如My.Resources.c1
)。
答案 3 :(得分:0)
感谢Steven的极好回答,我能够找出C#用法
tmpPicture.Image = (System.Drawing.Bitmap)Resources.ResourceManager.GetObject("c" & i.toString());
虽然我的图片是一个图标,实际的代码是
_image = (System.Drawing.Icon)Resources.ResourceManager.GetObject(Type + imageNo.toString());
请投票史蒂文斯回答(他们不会让我)。对于那些迫切需要快速回答的人以及那些想要学习编码的人来说,这种答案是有帮助的。