使用String查找my.resources

时间:2015-06-15 22:52:54

标签: vb.net

我有许多名为

的资源
My.Resources.diceDark1
My.Resources.diceDark2
My.Resources.diceDark3...

我想做点什么

For i as integer = 1 to 10
    button1.backgroundimage = My.Resources.diceDark i
Next

因此它将遍历所有资源并将背景图像更改为

1 个答案:

答案 0 :(得分:1)

Designer为您添加到Resources的图像等创建属性getter和setter。因此,对于名为dicedark1.jpg的图像,它会创建:

Friend ReadOnly Property diceDark1() As System.Drawing.Bitmap
    Get
        Dim obj As Object = ResourceManager.GetObject("diceDark1", resourceCulture)
        Return CType(obj,System.Drawing.Bitmap)
    End Get
End Property

您可以在Resources.Designer.vb中看到这些内容。所以资源"名称"你使用的不是变量,而是Resources对象的属性名称。但是你可以做什么,就是你在getter中看到的,即使用GetObject

Private DiceNames As String() = {"diceDark1", "diceDark2", "diceDark3" ...}
...
' assuming you have control refs in an array also:
For i As Int32 = 0 To 6
    picBox(i).BackgroundImage = My.Resources.ResourceManager.GetObject(DiceNames(i)) 
Next i

属性包装器显然可以更轻松地获取您的资源。要使用循环,您需要在数组或列表中使用目标控件,因为picBox + 1或其任何变体都不会比My.Resources.DiceDark i引用更好。