0

我正在编写一个 pokedex 类型的交易作为我班级的练习。基本上,我有一个名为“口袋妖怪”的课程。该类的属性之一是“ImgName”,我想用它来显示来自同名资源的图像。

VB 不允许我将 ImgName 作为字符串调用,然后使用 'My.Resources.ImgName'

我该怎么做,或者有什么替代方案?我希望它由 pokemon 对象中的属性确定,并且我不想在 if-elseif 语句中为每个单独的 pokemon 进行硬编码。

4

2 回答 2

0

一种方法是您可以将资源文件添加到您的项目中。然后将资源放入其中。您将能够像这样解决它:

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 方服务器实时下载等)。

于 2013-04-09T00:51:03.757 回答
0

BackgroundImage = My.Resources.ResourceManager.GetObject(aString)

比以前的答案容易 10 倍恕我直言

于 2013-06-06T04:09:05.653 回答