c# - 如何获取资源中的所有图像列表?

标签 c# winforms

我有一个 WinForms 项目并向资源中添加了多个图像(项目属性 -> 资源)。现在我有一个 Form1.cs,一个带有 .resx 文件的 UserControl1.cs,并使用 Assembly.GetManifestResourceNames(),它包含 3 个字符串,即:

1 TestApplication1.Properties.Resources.resources, 2 TestApplication1.Form1.resources 3 TestApplication1.UserControl1.resources

我现在需要获取的显然是#1 中的文件,其中包含我需要获取的图像。我需要做的是有一个列表,我可以通过它们的索引访问这些图像。我可以毫无问题地单独访问这些文件,但我有 72 张图像,所以我需要将它们作为列表。所以我的问题是,如何将 #1 中的这些图像作为列表获取?

编辑: 没有其他方法可以创建一个列表并将我所有的 72 张图像添加到其中吗?或者有什么方法可以从资源中获取所有这些图像作为列表?此外,我不想诉诸于使用 System.IO,因为我会将此应用程序构建为类库。

最佳答案

要获取 resx 文件中的所有图像,您可以使用以下任一选项:

ResourceManager.GetResourceSet

基于 Dai's answer你可以使用 ResourceManager.GetResourceSet然后以这种方式过滤和调整结果:

var images = Properties.Resources.ResourceManager
                       .GetResourceSet(CultureInfo.CurrentCulture, true, true)
                       .Cast<DictionaryEntry>()
                       .Where(x => x.Value.GetType() == typeof(Bitmap))
                       .Select(x => new { Name = x.Key.ToString(), Image = x.Value })
                       .ToList();

反射

此外,作为另一种选择,您可以对资源类型使用反射并找到属性并以这种方式调整结果:

var images = typeof(Properties.Resources)
               .GetProperties(BindingFlags.Static | BindingFlags.NonPublic |
                                                    BindingFlags.Public)
               .Where(p => p.PropertyType == typeof(Bitmap))
               .Select(x => new { Name = x.Name, Image = x.GetValue(null, null) })
               .ToList();

关于c# - 如何获取资源中的所有图像列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34826111/

相关文章:

.net - .net 中没有间隙的柱形图

c# - 我是否应该升级才能使用 SqlDataReader 的新异步方法?

c# - 如何在表单加载时删除所有 DataGridView 行?

c# - 如何使用 C# DirectoryInfo 枚举所有子目录的文件?

c# - 如果使用继承,如何检查列表的类型

c# - WinApi - PeekMessage 始终返回 False

c# - 使用 Linq 获取子记录

c# - 将非托管/非托管成员添加到托管类

c# - 良好、安全的加密

c# - 更改 ListView 标题的颜色?