2013-04-09 1 views
0

Я кодирую сделку типа pokedex как практику для своего класса. В принципе, у меня есть класс под названием «покемон». Одним из свойств класса является «ImgName», которое я хочу использовать для отображения изображения из ресурсов с тем же именем.Как выбрать изображение из ресурсов через строку?

VB не позволяет мне называть ImgName в виде строки, а затем использовать «My.Resources.ImgName»

Как я могу это сделать, или то, что некоторые альтернативные варианты для этого? Я хочу, чтобы это определялось свойством объекта pokemon, и я не хочу иметь жесткий код в инструкции if-elseif для каждого покемона.

ответ

0

В одном случае вы можете добавить файл ресурса в свой проект. Затем отбросьте ресурс. Вы сможете решить это следующим образом:

My.Resources.Resource1.ImgName 

Resource1 Ваше имя файла ресурсов и ImgName это имя ресурса здесь. Но вам нужно сделать жесткий код для каждого вызова. Тем не менее, вы получаете полную поддержку intellisense с проверкой типов.

Если вы не хотите, жесткий код, здесь урезанная версия моего рабочего кода:

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.

Это слагает весь ваш ресурс в исполняемый файл, который имеет как преимущества, так и недостатки, в зависимости от ситуации. Тем не менее, он должен работать на ваши нужды, так как я предполагаю, что количество разных покемонов ограничено и не меняется на протяжении всей игры (т. Е. Загружено с стороннего сервера в режиме реального времени и т. Д.).

+0

При попытке использовать свой код, я получаю ошибку о том, что тип «растровый» является не определено, это то, что вы определили в своем коде, или я что-то пропустил? – YourRuler

+0

@ user2259724: [Растровое изображение] (http://msdn.microsoft.com/en-ca/library/system.drawing.bitmap.aspx) является стандартным классом .NET. Для этого требуется пространство имен System.Drawing, но вы должны добавить это автоматически при создании проекта WinForms. – Neolisk

+0

А, я начал проект как консольное приложение. Так что это объясняет, я импортировал его, и это сработало, спасибо! – YourRuler

0

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

10 раз легче, чем предыдущий ответ IMHO