Hallo!
Für die Wahl eines Ordners verwendet man den FolderBrowserDialog (wie gezeigt).
Es muss dann eine (gefilterte) Liste der Bilddateien im gewählten Ordner erstellt
werden (wie gezeigt).
Zum Navigieren bewegt man den Index innerhalb dieser Liste (wie im Beispiel durch
Verarbeitung von Tastencodes im Keydown-Event gezeigt).
Nach dem Verändern des Index muss das entsprechende Bild aus der Datei in die
Picturebox geladen werden (im Beispiel: Aufruf der Routine PicLoad).
Wenn Du das Navigieren mit Buttons regeln willst, mußt Du nur den Code zur
Veränderung des Listen-Index aus den Select-Case-Blöcken in
den Click-Ereignis-Handler des entsprechenden Buttons verlagern - und
die "LoadPic"-Routine rufen.
Etwa so:
Imports System.Linq
Public Class frmPicBrowser
Dim WithEvents btnPrevious As New Button _
With {.Parent = Me, .Left = 40, .Width = 35, .Text = "&<"}
Dim WithEvents btnNext As New Button _
With {.Parent = Me, .Left = 80, .Width = 35, .Text = "&>"}
Dim WithEvents btnFolder As New Button _
With {.Parent = Me, .Left = 120, .Text = "&Ordner"}
Dim fbd As New FolderBrowserDialog With _
{.Description = "Ordner mit Bilddateien wählen", _
.ShowNewFolderButton = False}
Dim pbox As New PictureBox With _
{.Parent = Me, .Dock = DockStyle.Bottom, _
.SizeMode = PictureBoxSizeMode.Zoom}
'Erstellung der Verwaltungs-Variablen:
'=============================
'Array mit den unterstützten Bilddatei-Extensions
'incl. Wildcard für Getfiles-Methode
Dim picfileextensions() As String = _
{"*.jpg", "*.jpeg", "*.png", "*gif", "*.tiff", "*.tif", "*.bmp"}
'Liste der Dateinamen im gewählten Ordner
Dim picfiles As New List(Of String)
'Hier wird jeweils der aktuelle Bildindex abgelegt
Dim picindex As Integer
Private Sub LoadPic()
If picindex >= 0 And picindex < picfiles.Count Then
'Bild laden und Dateiname anzeigen
pbox.LoadAsync(picfiles(picindex))
Me.Text = "[" & CStr(picindex + 1) & " von " & CStr( _
picfiles.Count) & "] " & _
IO.Path.GetFileName(picfiles(picindex))
Else
pbox.Image = pbox.ErrorImage
Me.Text = "Keine Bilddatei vorhanden"
End If
End Sub
Private Sub frmPicBrowser_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
frmPicBrowser_ResizeEnd(Me, EventArgs.Empty)
End Sub
Private Sub btnFolder_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles btnFolder.Click
'Orderauswahl-Dialog (ggf. Abbruch durch User)
If fbd.ShowDialog = DialogResult.Cancel Then Exit Sub
Me.Text = "Bilddateien werden ermittelt ....."
With My.Computer.FileSystem
picfiles = .GetFiles(fbd.SelectedPath, _
FileIO.SearchOption.SearchTopLevelOnly, picfileextensions).ToList
End With
If picfiles.Count < 1 Then
MsgBox("Ordner enthält keine Bilddatei-Formate")
picindex = -1
Else
picindex = 0
End If
LoadPic()
End Sub
Private Sub btnNext_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles btnNext.Click
picindex = Math.Min(picfiles.Count - 1, picindex + 1)
LoadPic()
End Sub
Private Sub btnPrevious_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles btnPrevious.Click
picindex = Math.Max(0, picindex - 1)
LoadPic()
End Sub
Private Sub frmPicBrowser_ResizeEnd(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.ResizeEnd
pbox.Height = Me.Height - 80
End Sub
End Class |