2013-10-06 304 views
0

我有解決方案,包括幾個項目。
項目之一是常見的圖書館項目,其中主要包含可重複使用的代碼和功能,它們共享解決方案中的所有其他項目並引用所有包含的項目。
在該項目中,我也有資源,比如是圖像和圖標,我可以從其他項目中訪問這些資源這樣的:解決方案中所有項目的共同資源

Me.Icon = myCommonDll.My.Resources.backup__add__16x16 

的問題是: 是否可以以某種方式進行,在myCommonDll這些公共資源將是解決方案中的其他項目的實際資源,所以當我在設計器的屬性窗口中單擊「圖像」或「圖標」時,我會列出myCommonDll.My.Resources中列出的圖像或圖標,以及如何操作?

+0

您是否讓資源文件公開? – VahiD

+0

我不知道你在想什麼,但是在myCommonDll.My.Resources.Images和myCommonDll.My.Resources.Icons中有很多文件。如果這是你的意思,我從相關的組合框設置「訪問修飾符」爲「公共」? –

+0

是的,這就是我的意思,但經過評論,我意識到,即使您將Access Modifier設置爲public,您也無法在設計器中使用資源查看其他項目設置圖像的資源,但我認爲它無法完成 – VahiD

回答

1

編輯:這主要是針對VS2008之前的VS版本,它不允許您更改RE資源的訪問級別修改器。其他的選擇是外部工具或反射,但仍然沒有向設計師公開資源。

DLL資源在運行時非常容易,但不在設計器中。您需要在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中揭露一個枚舉充當資源清單:

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

DLL函數可以對ResImg起作用並使用大的case語句,也可以使用[Enum].GetNames來轉換/獲取一組圖像資源名稱。

+0

Hi Plutonix。我沒有看到這一點,因爲如果我引用一個DLL並將它導入爲名稱空間,那麼在設計和運行時我可以訪問圖像,如果我知道我經常不知道的確切名稱。這似乎是一個偉大的缺乏視覺工作室項目! –

+0

它實際上是公開使DLL資源的替代方案。此外,在VS 2008之前的VS版本中,沒有針對資源的訪問級別修飾符,因此其中一個留給了Reflection或類似的東西來獲取它們('InternalsVisibleToAttribute'不適用於NET2和VB組合)。不知道你有什麼VS版本。 – Plutonix

+0

好的,謝謝,我在VS2008上工作。 –

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> 
相關問題