Das Formular kann JPEGs in einem Ordner zusammenfassen,
anzeigen und sie als Liste serialisieren und deserialisieren
Public Class frmPicSerialize
'Instanz der serialisierbaren Datenklasse
Dim pl As PicList
Dim fmt As New System.Runtime.Serialization. _
Formatters.Binary.BinaryFormatter
'Auswahl der gelisteten Bilder
Dim WithEvents cbo_picnames As New ComboBox With _
{.Parent = Me, .DropDownStyle = ComboBoxStyle.DropDownList, _
.Width = 400, .Top = 40}
'Anzeige eines gewählten Bildes
Dim pb As New PictureBox With _
{.Parent = Me, .Width = 400, .Height = 400, .Top = 80, _
.SizeMode = PictureBoxSizeMode.Zoom}
'Auswahl des Ordners, dessen JPEGs gelistet werden
Dim fbd As New FolderBrowserDialog With _
{.Description = "Ordner mit JPEG-Dateien"}
Dim WithEvents btnLoad As New Button With _
{.Parent = Me, .Text = "JPEGs in eine PicList laden", .Width = 400}
'Speichern der Bilderliste
Dim WithEvents btnSerialize As New Button With _
{.Parent = Me, .Text = "Serialize PicList", _
.Width = 400, .Top = 500, .Enabled = False}
'Laden einer serialisierten Bilderliste
Dim WithEvents btnDeSerialize As New Button With _
{.Parent = Me, .Text = "DeSerialize PicList", _
.Width = 400, .Top = 530}
Dim ofd As New OpenFileDialog With {.Title = "Laden einer PicList", _
.CheckFileExists = True}
Dim sfd As New SaveFileDialog With {.Title = "Speichern einer Piclist", _
.OverwritePrompt = True}
Private Sub PicSerialize_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
Me.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedDialog
Me.Size = New Size(420, 600)
End Sub
Private Sub cbo_picnames_SelectedIndexChanged _
(sender As Object, e As System.EventArgs) _
Handles cbo_picnames.SelectedIndexChanged
pb.Image = pl.GetPic(cbo_picnames.SelectedIndex).Value
End Sub
Private Sub btnLoad_Click(sender As Object, _
e As System.EventArgs) Handles btnLoad.Click
If fbd.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub
PrepareForm()
'Hintergrund-Thread zum Laden der JPEGs aus einem Ordner
Dim lds As New Threading.ThreadStart(AddressOf loadpics)
Dim ld As New Threading.Thread(lds)
ld.Start()
End Sub
Private Sub loadpics()
pl = New PicList(fbd.SelectedPath)
Me.Invoke(New MethodInvoker(AddressOf shownames))
End Sub
Private Sub PrepareForm()
Me.Text = "Bilder werden geladen"
cbo_picnames.Items.Clear()
pb.Image = Nothing
End Sub
Private Sub shownames()
cbo_picnames.Items.Clear()
For i As Integer = 0 To pl.Count - 1
cbo_picnames.Items.Add(pl.GetPic(i).name)
Next i
btnSerialize.Enabled = pl.Count > 0
Me.Text = pl.Count.ToString & " Bilder aus " _
& pl.Folder & " geladen"
cbo_picnames.SelectedIndex = 0
End Sub
Private Sub btnSerialize_Click(sender As Object, _
e As System.EventArgs) Handles btnSerialize.Click
If sfd.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub
IO.File.Delete(sfd.FileName)
Using fs As New IO.FileStream _
(sfd.FileName, IO.FileMode.Create, IO.FileAccess.Write)
fmt.Serialize(fs, pl)
End Using
End Sub
Private Sub btnDeSerialize_Click(sender As Object, _
e As System.EventArgs) Handles btnDeSerialize.Click
If ofd.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub
PrepareForm()
Using fs As New IO.FileStream _
(ofd.FileName, IO.FileMode.Open, IO.FileAccess.Read)
pl = DirectCast(fmt.Deserialize(fs), PicList)
shownames()
End Using
End Sub
End Class |