Как получить имена всех ресурсов в файле ресурсов

Ответов: 4


9 принят

Посмотрите, помогает ли этот фрагмент кода.

    Dim runTimeResourceSet As Object
    Dim dictEntry As DictionaryEntry

    runTimeResourceSet = My.Resources.ResourceManager.GetResourceSet(System.Globalization.CultureInfo.CurrentCulture, False, True)
    For Each dictEntry In runTimeResourceSet
        If (dictEntry.Value.GetType() Is GetType(Icon)) Then
            Console.WriteLine(dictEntry.Key)
        End If
    Next

Я использовал значок в качестве примера, который вам нужно будет изменить, если вы используете Bitmap.

EDIT: вам нужно будет использовать ссылку dictEntry.Value и посмотреть, как ее можно использовать для добавления в imagelist.


1

На C # написано следующее: вы легко сможете перевести это на VB.

Assembly executingAssembly = GetExecutingAssembly();

foreach (string resourceName in executingAssembly.GetManifestResourceNames())
{
    Console.WriteLine( resourceName );
}

Теперь, когда у вас есть все имена ресурсов, вы можете перебирать список и делать что-то вроде:

foreach(string s in executingAssembly.GetManifestResourceNames())
{
    if (s.EndsWith(".bmp"))
    {
        imgStream = a.GetManifestResourceStream(s);
        if (imgStream != null)
        {                    
            bmp = Bitmap.FromStream(imgStream) as Bitmap;
            imgStream.Close();
        }   
    }
}

Я этого не пробовал, но он должен работать.


0

Попробуйте что-то вроде этого:

Dim reader As New ResXResourceReader(resxFilePath)

Dim en As IDictionaryEnumerator
en = reader.GetEnumerator()

While en.MoveNext()
    Console.WriteLine("Resource Name: [{0}] = {1}", en.Key, en.Value)
End While

reader.Close()

Вы можете найти больше примеров, которые могли бы помочь вам по этой ссылке . Примеры написаны на C #, но их не очень сложно изменить для vb.net


0

В то время как выше ответы указывали мне в правильном направлении, я добавляю отдельный ответ, чтобы разъяснить использование GetResourceSet и последующую загрузку изображений:

        Dim resSet As Resources.ResourceSet = My.Resources.ResourceManager.GetResourceSet(Globalization.CultureInfo.InvariantCulture, True, False)
        For Each de As DictionaryEntry In resSet
            If (de.Value.GetType() Is GetType(Bitmap)) Then
                m_Icons.Add(de.Key, My.Resources.ResourceManager.GetObject(de.Key))
            End If
        Next

Обратите внимание на следующие аргументы в My.Resources.ResourceManager.GetResourceSet :

  • использование InvariantCulture
  • Для загрузки ресурсов требуется True , так как на данный момент в моей библиотеке классов я еще не получил доступ к набору ресурсов, и это заставляет его загружаться. Это похоже на то, что @ bcrgen-steinblock означало в его комментарии, но это было неправильно понято в последующем редактировании
  • false для меня нормально, потому что у меня нет набора резервных / стандартных ресурсов
vb.net, зрительно-студия, Resx,
Похожие вопросы