'Example d'utilisation
Private Sub Form2_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
' Récupération de l'image de fond du formulaire 'Form1'
' comme image de fond du formulaire 'Form2'
Me.BackgroundImage = Get_Resource_ByName("form1.$this.BackgroundImage")
End Sub
''' <summary>Obtention d'une ressource en utilisant son nom</summary>
''' <param name="pName">Nom de la ressource précédé de l'object qui la contient suivit d'un point .</param>
''' <remarks>Pour d'autres type de ressources, il faudra modifier en conséquence.</remarks>
Public Function Get_Resource_ByName(ByVal pName As String) As Image
'Valeur qui sera retournée
Dim lReturnValue As Image = Nothing
'Dossier qui contient la ressource recherchée.
Dim lRessourcesFolder As String
Dim lvi1 As Integer = InStr(pName, ".")
If lvi1 = 0 Then
'Si absent le dossier standard de ressources de l'Assembly est utilisé.
lRessourcesFolder = "resources"
Else
'Sinon on utilise le paramètre fourni
lRessourcesFolder = Mid(pName, 1, lvi1 - 1)
pName = Mid(pName, lvi1 + 1)
End If
'On obtient l'Assembly appelante qui contient le dossier de la ressource recherchée.
Dim lAssembly As System.Reflection.Assembly = System.Reflection.Assembly.GetEntryAssembly
'Rechercher du dossier
For Each resourceName In lAssembly.GetManifestResourceNames
If resourceName.ToLower().EndsWith("." & lRessourcesFolder & ".resources") Then
'Le dossier a été trouvé
Dim lStream As System.IO.Stream = lAssembly.GetManifestResourceStream(resourceName)
Dim reader As ResourceReader = New ResourceReader(lStream)
Dim entry As DictionaryEntry
'Recherche de la ressource
For Each entry In reader
If entry.Key.ToLower() = pName.ToLower() Then
'La ressource a été trouvée.
lReturnValue = CType(entry.Value, Bitmap)
'Fin de la recherche de la ressouce.
Exit For
End If
Next
reader.Close()
lStream.Close()
'Fin de la recherche dans le dossier.
Exit For
End If
Next
Return lReturnValue
End Function