Listenanzeige mit Bildern vb.net

dallas998

Grünschnabel
Hallo,

ich hab benötige eine Listenansicht, die mir fertig aufbereitete Thumbnails plus BIldnamen darstellt.

Ich habe also ein Formular mit einer Imagelist. Die Imagelist, wird über eine Klasse mit Bildern (IMAGE) bestückt.
Der Teil funktioniert auch. Die Bilder sind also in der Imagelist drin.

Nun möchte ich diese Bilder gern zusammen mit dem Bildnamen in einer LIste anzeigen.
Ich habe mich schon totgesucht. Es gibt einige Seiten mit Mustern, aber keines für VB.net.
Auch mit der Suche gibt es zwar eine C# Anwendung, die ich aber nicht auf VB übertragen kann.
So fit bin ich im Programmieren auch (noch) nicht.

Bisher ist es mir also weder mit der Listbox, noch mit dem Listview gelungen ein Bild anzuzeigen.

Daher die Frage: Welches Steuerelement ist dafür geeignet ?
Ich denke der Listview ist eine gute Geschichte, oder ?

Kann mir jemand mal ein (wenn möglich dokumentiertes) Beispiel geben, wie ich den Listview mit dem Listimage kopple, und
die Bilder und den Bildnamen angezeigt bekomme ?

Ich hab das irgendwie noch nicht begriffen.

Schon mal vielen Dank ...

D.
 
Hallo,

so habe ich das gelöst.
über die Funktion "GetFileListe" wird der Ordner mit dessen Unterordner durchsucht aus den Bilddateien werden
mittels der Funktion "createMiniThumb" die Bilder für die Listbox erstellt.
Diese werden der ImageCollektion durch "Me.ImageCollection.AddImage(bmp)" hinzugefügt.

Durch
Dim name As String = Path.GetFileName(Files(i).ToString)
listbox.Items.Add(name, Me.ImageCollection.Images.Count - 1)

werden listbox und ImageCollection zusamengeführt.

Ich verwend für meine Anwendung DevExpress Controls du musst deshalb ImageCollection gegen ImageList austauschen.


Gruß Ralf


Public Function GetFileList(ByVal Root As String, Optional ByVal SubFolders As Boolean = True) As List(Of String)
Me.ImageListBoxControl1.Items.Clear()
Me.ImageCollection.Images.Clear()

Dim FileList As New List(Of String)
SeekFiles(Root, Me.ImageListBoxControl1, SubFolders)
Return FileList​
End Function

Private Sub SeekFiles(ByVal Root As String, ByRef listbox As DevExpress.XtraEditors.ImageListBoxControl, ByVal SubFolders As Boolean)
Try
Dim Files() As String = System.IO.Directory.GetFiles(Root)

Dim Folders() As String = System.IO.Directory.GetDirectories(Root)
Dim Anzahl As Integer = Files.Length
Me.ProgressBarControlBilderLaden.Visible = True
Me.LabelControlLadeStatus.Visible = True
Me.LabelControlLadeStatus.Text = ""
If Anzahl > 0 Then
Me.ProgressBarControlBilderLaden.Position = 0
Me.ProgressBarControlBilderLaden.Properties.Maximum = Anzahl
Me.ProgressBarControlBilderLaden.Properties.Step = 1
Me.ProgressBarControlBilderLaden.Update()
Me.ProgressBarControlBilderLaden.Properties.PercentView = True

listbox.SetSelected(0, False)
listbox.SelectionMode = SelectionMode.None


For i As Integer = 0 To UBound(Files)
Dim bmp As Bitmap
bmp = createMiniThumb(Files(i).ToString, Nothing, 100)
If Not IsNothing(bmp) Then
Me.ImageCollection.AddImage(bmp)

Dim name As String = Path.GetFileName(Files(i).ToString)

listbox.Items.Add(name, Me.ImageCollection.Images.Count - 1)

Me.ProgressBarControlBilderLaden.PerformStep()
Me.ProgressBarControlBilderLaden.Update()
Me.LabelControlLadeStatus.Text = name & " wird geladen"
Me.Refresh()
End If
Next
listbox.SelectionMode = SelectionMode.MultiSimple

If SubFolders = True Then
For i As Integer = 0 To UBound(Folders)
SeekFiles(Folders(i), listbox, SubFolders)
Next
End If

Me.LabelControlLadeStatus.Text = "Das Laden der Bilder ist abgeschlossen."
Me.LabelControlLadeStatus.ForeColor = Color.Black
Else
Me.ProgressBarControlBilderLaden.Properties.Maximum = 1
Me.LabelControlLadeStatus.Text = "Keine Bilder zum laden vorhanden."
Me.LabelControlLadeStatus.ForeColor = Color.Red
End If

Catch Ex As Exception
End Try​
End Sub

Private Function createMiniThumb(ByVal strOriginalImage As String, ByVal strnewThumbnailImage As String, ByVal nSize As Integer) As System.Drawing.Image
Try
Dim objImage As System.Drawing.Image
Dim objFileStream As New FileStream(strOriginalImage, FileMode.Open, FileAccess.Read)
Dim fakeCall As System.Drawing.Image.GetThumbnailImageAbort

'Original einlesen
objImage = System.Drawing.Image.FromStream(objFileStream)

fakeCall = New System.Drawing.Image.GetThumbnailImageAbort(AddressOf FakePreviewCallback)

'Groesse festlegen
objImage = objImage.GetThumbnailImage(nSize, nSize, fakeCall, IntPtr.Zero)

Return objImage
'Alles wieder freigeben
objFileStream = Nothing
objImage = Nothing

Catch ex As Exception
Return Nothing
End Try​
End Function

Function FakePreviewCallback() As Boolean
Return False​
End Function
 
Erstmal Danke für die Antwort, aber so richtig klappt das nicht....
Irgendwie scheine ich hier noch was falsch zu machen....

Mein Form hat die Listbox1 (und noch ein Listview zum testen.

Die Versorgung mit einem Bild wird über eine Klasse gesteuert.
Die Images liegen in der jeweiligen Klasse als INT64 String vor.

Über GET_THUMB wird bei mit daraus über eine Funktion wieder ein IMAGE.

DIe Klasse selbst geht bereits als List of (EInzelbild)
in die Initialisierung des Forms.

Zum testen nutze ich LIstbox und Listview.
Beides klappt nicht.

Das sieht dann in etwa so aus.
Code:
    Public Sub New(ByRef Bildliste As List(Of Einzelbild))

        ' Dieser Aufruf ist für den Windows Form-Designer erforderlich.
        InitializeComponent()

'Imagelist und Listview konfigurieren.
        ImageList1.ImageSize = New Size(200, 200)
        ListView1.LargeImageList = ImageList1
        ListView1.View = View.LargeIcon

'Bilder aus der Klassen auslesen und zurückgeben....
        For Each BBild In Bildliste
            Dim Pic As Image = BBild.Get_Thumb
            Me.ImageList1.Images.Add(Pic)
            Me.ListBox1.Items.Add(Pic)
        Next

    End Sub

Also die Imagelist scheint die Bilder zu haben.
Da werden zumindest 6 Items gezeigt.
Ich habe GET_Thumb mal als Quelle einer Picturebox genutzt. Das war kein Problem.
Also die Klasse liefert ein Bild. Nur geht das nicht in die Listbox (und auch nicht in den LIstview).

Statt einem Bild wird in der Listbox1 nur "System.Drawing.Image" angezeigt.
Der Listview ist einfach leer (die Scrollbalken, zeigen schon das etwas da ist, aber eben kein Bild....)

Hat jemand eine Idee, was ich hier falsch mache ?

Nochmal danke !
D.
 
Hi,

eigentlich soll das in etwa so ausehen

Code:
For Each BBild In Bildliste
            Dim Pic As Image = BBild.Get_Thumb
            Me.ImageList1.Images.Add(Pic)
            Me.ListBox1.Items.Add( "Text", Me.ImageList1.Items.Count - 1)
        Next

Gruß Ralf
 
Hmm.
Hab ich getestet. Klappt nicht:
Fehlermeldung:
'Items' ist kein Member von Syste.-Windows.Forms.Imagelist.

Schade.
Ich habe jetzt nochmal das hier Probiert:
Me.ListBox1.Items.Add(Me.ImageList1.Images.Item(0))

Soll mir das erste Bild der Imageliste zeigen.
Text geht nicht, weil die LIstbox nur einen Eintrag will.Sonst sind es zu viele Argumente.

Ich habe im Augenblick dazu keine Idee mehr.
Ich werden jetzt eine FORM mit PictureBoxen bauen, in die ich die Thumbs einfülle.
Falls noch wer eine Idee hat... Ich bin ganz Ohr :)
 
Zurück