And the following would apply if you are dynamically loading images with no regard for their name
As I have but two audio files on my machine and many images the following is a good example of dynamically working with image resourceCode:Dim MyProperties As System.Reflection.PropertyInfo() = _ GetType(My.Resources.Resources).GetProperties(System.Reflection.BindingFlags.NonPublic Or _ System.Reflection.BindingFlags.Instance Or _ System.Reflection.BindingFlags.Static) ListBox1.DisplayMember = "Name" ListBox1.DataSource = (From T In MyProperties Where T.PropertyType Is GetType(UnmanagedMemoryStream)).ToList
Usage
Implemented usingCode:Public Class Form1 WithEvents bsData As New BindingSource Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load bsData.DataSource = ResourceImages.GetInstance.DataTable cboResourceImages.DisplayMember = "Name" cboResourceImages.ValueMember = "Identifier" cboResourceImages.DataSource = bsData PictureBox1.DataBindings.Add("Image", bsData, "Image") End Sub End Class
Code:Public Class ResourceImages Private Shared _Instance As ResourceImages Private dtImages As DataTable Public Function DataTable() As DataTable If dtImages Is Nothing Then GetImages() End If Return dtImages End Function Public Shared Function GetInstance() As ResourceImages If _Instance Is Nothing Then _Instance = New ResourceImages End If Return _Instance End Function ''' <summary> ''' Save image by Identifier field value ''' </summary> ''' <param name="FileName"></param> ''' <param name="Identifier"></param> ''' <remarks></remarks> Public Sub SaveImage(ByVal FileName As String, ByVal Identifier As Int32) dtImages.Select("Identifier =" & Identifier)(0).Field(Of Image)("Image").Save(FileName) End Sub ''' <summary> ''' Save image by tweaking the name shown (for this demo) the ComboBox, ''' replacing spaces with underscore char, default to bin\debug folder ''' and yes we add the image extension. ''' </summary> ''' <param name="FileName"></param> ''' <param name="DisplayName"></param> ''' <remarks></remarks> Public Sub SaveImage(ByVal FileName As String, ByVal DisplayName As String) dtImages.Select("Name ='" & DisplayName & "'")(0).Field(Of Image)("Image").Save(FileName) End Sub ''' <summary> ''' Retrieve images from project resources ''' </summary> ''' <remarks></remarks> Private Sub GetImages() dtImages = New DataTable dtImages.Columns.AddRange(New DataColumn() _ { _ New DataColumn("Identifier", GetType(Int32)), New DataColumn("Name", GetType(System.String)), _ New DataColumn("Image", GetType(Image)) _ } _ ) dtImages.Columns("Identifier").AutoIncrement = True dtImages.Columns("Identifier").AutoIncrementSeed = 1 Dim MyProperties As System.Reflection.PropertyInfo() = GetType(My.Resources.Resources).GetProperties(System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.Instance Or System.Reflection.BindingFlags.Static) Dim BitMaps = (From T In MyProperties Where T.PropertyType Is GetType(Bitmap)).ToList If BitMaps.Count > 0 Then For Each pInfo As System.Reflection.PropertyInfo In BitMaps dtImages.Rows.Add(New Object() _ { Nothing, pInfo.Name.Replace("_", " "), My.Resources.ResourceManager.GetObject(pInfo.Name) } ) Next End If End Sub Protected Sub New() End Sub End Class




Reply With Quote