如何管理图标与几个项目的解决方案



我的解决方案中有五个项目。他们每个人都使用一些图标(其中许多图标在不同的项目中是相同的),我想把它们存储在一个地方。

我试图使用单独的项目来存储图标,但我得到惨败…

当我使用其他项目中的图标(项目包含所有图标)时,Visual Studio会自动将这些图标复制到form.resx文件中。

解释:首先,我不能将图标(从其他项目)从designer连接到我的button。因此,我必须转到form.designer.cs并手动将图标附加到按钮上。在这些操作之后,VS重建了form.designer.cs中的自动生成部分,用自己的代码替换了我的代码,并将图标复制到form.resx文件中。

//my code
this.btnCompile.Image = SharedProject.Properties.Resources.compile;
//code replaced with VS
this.btnCompile.Image = ( (System.Drawing.Image)( resources.GetObject( "compile.Image" ) ) );

您可以看到,图像被复制到本地项目的资源。在这种情况下,更改按钮的图像不足以仅替换共享项目中的我的图像(compile .png)。我还需要在它使用的每个表单中替换它。

问题:如何在解决方案中管理图标以避免重复和这个大的不便?

我已经解决了完全相同的问题,但有一个限制。让我们看看两种可能:

1)你想有能力更新所有的图片通过覆盖一个文件夹与图片在应用程序文件夹。
你可以按照@Farzin Zaker的建议使用Service。该解决方案的缺点是你必须动态地设置控件的图像,并且在设计模式下,你将看不到具有正确图像的控件。

2)你想使用设计器。
在这种情况下,您必须添加这些图像作为资源。诀窍是让VS使用相对路径到指定文件夹中的图像。默认情况下,VS将所有资源文件复制到项目Resources文件夹中。但是,如果VS看到在资源文件夹中"注册"了其他同名的文件,VS存储在.resx相对路径到image。所以如果你想在两个项目中添加相同的图片你必须:
-创建文件夹Resources
-将图像添加为现有项目(作为链接):在VS中,您将看到到图像的链接,将action设置为None

你可以设计一个服务项目,它将为你的其他项目提供图标或其他资源。你应该在你的应用程序中实现这样一个接口:

public interface IResourceProvider
{
   Image RetrieveIcon(string key);
   //you can add other resource types here.
}
然后在一个新类中实现这个接口,并向传递给它的方法的每个键返回相关的Icon。这里你需要浏览这个项目的resx文件请求图标(资源)

那么在你的应用程序中,你应该调用你的ResourceProvider类来提供所需的资源项

相关内容

最新更新