0

我有几个项目的解决方案。
项目之一是公共库项目,其中包含大部分可重用的代码和函数,它们共享解决方案下的所有其他项目,并引用所有包含的项目。
在那个项目中,我还有图像和图标等资源,我可以从其他项目中访问这些资源,例如:

Me.Icon = myCommonDll.My.Resources.backup__add__16x16

问题是:是否可以通过某种方式使 myCommonDll 中的那些公共资源成为解决方案中其他项目的实际资源,所以当我在设计器的属性窗口中单击“图像”或“图标”时,我会得到列出的图像或图标myCommonDll.My.Resources 以及如何做到这一点?

4

2 回答 2

1

编辑:这主要适用于 VS2008 之前的 VS 版本,它不允许您更改资源的访问级别修饰符。其他替代方法是外部工具或反射,但仍然没有向设计人员公开资源。

DLL 资源在运行时很容易获得,但在设计器中却没有。您需要在 DLL 中编写一个小型代理来按名称获取图像。动态链接库:

Public Class ResMgr
 ' depending on what else is in the DLL, can just add to an existing class
 Public Function GetImage(imgName As String) As Image
      Return My.Resources.ResourceManager.GetObject(imgName)
 End Function

 '' alternatively declare it SHARED eg
 ''Public Shared Function/Property GetImage As Image

End Class

应用程序:

MyRM = New ResMgr

thisImg = New Image
thisImg = MyRM.GetImage(userImg)

如果将其构造为Shared方法,则只是:

thisImg = ResMgr.GetImage(userImg)

如果需要,您可以在 DLL 中公开一个 Enum 以充当资源清单:

Public Enum ResImg
      Image1                     ' use the names of the images
      Backup52
      Flag_FR
      Flag_RUS
      ...
End Enum

DLL 函数可以作用于 ResImg 并使用大 case 语句,也可以用于[Enum].GetNames转换/获取图像资源名称数组。

于 2013-10-06T12:07:00.170 回答
0

编辑您的 .vbproj 文件并通过添加共享资源文件的公共目录路径来更新以下两个语句。祝你好运!

<Compile Include="<common Dir>\My Project\Resources.Designer.vb">
  <AutoGen>True</AutoGen>
  <DesignTime>True</DesignTime>
  <DependentUpon>Resources.resx</DependentUpon>
</Compile>

<EmbeddedResource Include="<common Dir>\My Project\Resources.resx">
  <Generator>VbMyResourcesResXFileCodeGenerator</Generator>
  <CustomToolNamespace>My.Resources</CustomToolNamespace>
  <SubType>Designer</SubType>
  <LastGenOutput>Resources.Designer.vb</LastGenOutput>
</EmbeddedResource>
于 2017-10-27T16:16:56.460 回答