我正在编写一个 pokedex 类型的交易作为我班级的练习。基本上,我有一个名为“口袋妖怪”的课程。该类的属性之一是“ImgName”,我想用它来显示来自同名资源的图像。
VB 不允许我将 ImgName 作为字符串调用,然后使用 'My.Resources.ImgName'
我该怎么做,或者有什么替代方案?我希望它由 pokemon 对象中的属性确定,并且我不想在 if-elseif 语句中为每个单独的 pokemon 进行硬编码。
我正在编写一个 pokedex 类型的交易作为我班级的练习。基本上,我有一个名为“口袋妖怪”的课程。该类的属性之一是“ImgName”,我想用它来显示来自同名资源的图像。
VB 不允许我将 ImgName 作为字符串调用,然后使用 'My.Resources.ImgName'
我该怎么做,或者有什么替代方案?我希望它由 pokemon 对象中的属性确定,并且我不想在 if-elseif 语句中为每个单独的 pokemon 进行硬编码。
一种方法是您可以将资源文件添加到您的项目中。然后将资源放入其中。您将能够像这样解决它:
My.Resources.Resource1.ImgName
Resource1
是你的资源文件名,ImgName
是这里的资源名。但是你需要为每次调用做硬编码。但是,您可以通过类型检查获得完整的智能感知支持。
如果您不想要硬代码,这里是我的生产代码的精简版本:
Imports System.Reflection
Imports System.Xml.Linq
Public Class EmbeddedResourceManager
Private Class EmbeddedResourceManagerCore
Private Shared _executingAssembly As Assembly
Private Shared _resourcePrefix As String
Shared Sub New()
_executingAssembly = Assembly.GetExecutingAssembly
_resourcePrefix = _executingAssembly.GetName.Name & "."
End Sub
Public Shared Function GetStream(resourceRelName As String) As IO.Stream
Return _executingAssembly.GetManifestResourceStream(_resourcePrefix & resourceRelName)
End Function
End Class
Public Shared Function GetImage(ByVal resourceName As String) As Bitmap
Return New Bitmap(EmbeddedResourceManagerCore.GetStream(resourceName))
End Function
End Class
因此,只要您需要,只需调用EmbeddedResourceManager.GetImage
并传递资源名称,就像它出现在您的项目中一样(您的图像文件需要附加到项目中)。您需要将有Build Action
问题的图像设置为Embedded Resource
.
这会将您的所有资源堆积到一个可执行文件中,根据具体情况,它既有优点也有缺点。不过,它应该可以满足您的需求,因为我假设不同口袋妖怪的数量是有限的,并且在整个游戏中不会改变(即从第 3 方服务器实时下载等)。
BackgroundImage = My.Resources.ResourceManager.GetObject(aString)
比以前的答案容易 10 倍恕我直言