Visual Studio图像加载从资源循环

时间:2013-12-03 13:53:38

标签: vb.net visual-studio resources picturebox filepath

在我的图片资源中,我有以下名称的图片: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

4 个答案:

答案 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());

请投票史蒂文斯回答(他们不会让我)。对于那些迫切需要快速回答的人以及那些想要学习编码的人来说,这种答案是有帮助的。