5

Visual Basic プロジェクト内に、多数の画像を含むリソース ファイル (resx) を追加しました。

ここで、画像の名前を照会したいと思います。Visual Studio IDE のデザイナー ビューで resx ファイルを開き、画像を選択すると、プロパティ グリッドに名前プロパティが表示されます (既定では「拡張子のないファイル名ですが、変更できます)」。

背景は、実行時に作成され、リソース ファイルの画像が取り込まれたイメージリストがあることです。これらの画像にキーでアクセスできるようにするには、キーを設定する必要があります。

私のコードは次のようになります(すべてハードコードされています):

Dim imagelist as new Imagelist
imageList.Images.Add("A", My.Resources.MyImages.A)
imageList.Images.Add("B", My.Resources.MyImages.B)
imageList.Images.Add("C", My.Resources.MyImages.C)
imageList.Images.Add("D", My.Resources.MyImages.D)
imageList.Images.Add("E", My.Resources.MyImages.E)
....
imageList.Images.Add("XYZ", My.Resources.MyImages.XYZ)

そして、私はこれを達成したい:

Dim imagelist as new ImageList

For Each img in GetMeAllImagesWithNameFromMyResourceFile
    imageList.Images.Add(img.Name, img.ImageFile)
Next

Name は文字列で、ImageFile は System.Drawing.Bitmap です。

4

4 に答える 4

10

このコードが役立つかどうかを確認してください。

    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

例としてアイコンを使用しましたが、ビットマップを使用している場合は変更する必要があります。

編集: dictEntry.Value の参照を使用する必要があります & それをイメージリストに追加するためにどのように使用できるかを確認してください。

于 2009-06-16T16:41:22.657 に答える
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();
        }   
    }
}

私はこれを試していませんが、うまくいくはずです。

于 2009-06-16T11:27:26.870 に答える
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用に変更するのはそれほど難しくありません。

于 2009-06-16T11:13:53.030 に答える