Ian*_*oyd 23 image visual-studio
默认情况下,当您将图像(图标,位图等)作为资源添加到项目时,图像的构建操作将设置为无.这样做是因为图像神奇地存储在.resources文件中.
我希望将资源存储为嵌入式资源(我的理由是无关紧要的,但我们只是假装它,以便我可以在 RedGate的Reflector中看到它们).
所以我将每个图像的Build Action更改为Embedded Resource,然后资源出现在Lutz的Reflector中 - 完全按照我的意愿.
不幸的是,微软特意说不要这样做:
请注意,当资源编辑器添加图像时,它会将" 构建操作"设置为" 无",因为.resx文件引用了图像文件.在构建时,图像被拉入.resx文件创建的.resources文件中.然后可以通过为.resx文件自动生成的强类型类轻松访问该图像.
因此,您不应将此设置更改为嵌入式资源,因为这样做会在程序集中包含两次图像.
那么将图像作为嵌入资源包含的正确方法是什么?
Dir*_*mar 43
注意:此答案不是处理图像资源的推荐方法.它只是解决了问题所描述的特定问题(即将图像包含为嵌入式资源).
不要将图像添加为资源.我宁愿做以下事情:
然后,您可以使用访问此资源
Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceUri)
Run Code Online (Sandbox Code Playgroud)
这样,图像不会神奇地添加到项目资源文件中,并且只有一个图像副本存储在程序集的资源中.
Ste*_*owe 11
在项目视图中,打开Properties子树; 双击Resources.resx项.
(如果没有,请右键单击"属性"项并选择"打开",然后单击左侧的"资源"选项卡,单击页面中间的链接以创建默认资源文件.)
单击resources.resx页面顶部的第一个droplist.它可能会说像"Strings"这样无用的东西,并选择Images.或者你可以按Ctrl+ 2.这将更改为"图像资源"视图.现在单击"添加资源"下拉列表,然后选择"现有文件".选择图像文件,然后单击"打开".如果您愿意,可以重命名资源.
单击"保存"图标.
您现在可以以编程方式访问嵌入式资源:
[namespace].Properties.Resources.[yourResourceName]
Run Code Online (Sandbox Code Playgroud)
在VS 2005中:
要在代码中引用图像,请使用以下内容:
btnStop.Image = myImages.Stop;
Run Code Online (Sandbox Code Playgroud)
这取决于您想要如何使用图像.
如果你想本地化和访问特定文化的特定图像,那么使用它ResourceManager是一个很好的方法,因为它为卫星装配,搜索,后备等提供了一些很好的功能.
如果您只想在程序集中嵌入资源并且不担心本地化(使用Assembly.GetManifestResourceStream),那么只需添加图像并将构建操作设置Embedded Resource为可以.
文档警告您不要设置构建操作,Embedded Resource因为资源已由资源编译器通过.resx文件编译到程序集中.
| 归档时间: |
|
| 查看次数: |
63160 次 |
| 最近记录: |