SlideShow / Diashow Bilder aus Ordner automatisch nachladen

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    SlideShow / Diashow Bilder aus Ordner automatisch nachladen

    Hallo liebe Community,

    ich möchte für ein Projekt eine SlideShow / Diashow machen, dazu greife ich auf einen Ordner zu aus dem Die Bilder geladen werden.
    Das funktioniert soweit auch ganz gut.

    Jetzt zu meiner Frage / Problem.

    In diesem Verzeichnis kommen wärend die SlideShow / Diashow läuft immer wieder neue Bilder hinzu, diese sollen automatisch eingebunden und angezeigt werden.
    Bisher musste ich das Programm neu starten, damit auch die neuen Bilder angezeigt werden.

    Der bisherige Code dazu:

    VB.NET-Quellcode

    1. ' http://www.authorcode.com/create-image-slide-show-in-vb-net/
    2. Public Class Form1
    3. Private IsFullScreen As Boolean = False
    4. Private ImageIndex As Integer = -1
    5. Private ImageDir As IO.FileInfo()
    6. Private frm As Form
    7. Private FullSizePic As PictureBox
    8. Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnSearch.Click
    9. If dlg.ShowDialog = DialogResult.OK Then
    10. 'AuthorCodeImageGalleryVB1.Directorypath = dlg.SelectedPath
    11. TextBox1.Text = dlg.SelectedPath
    12. End If
    13. End Sub
    14. Private Sub btnSlideShow_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSlideShow.Click
    15. If TextBox1.Text <> "" Then
    16. Dim di As New IO.DirectoryInfo(TextBox1.Text)
    17. ImageDir = di.GetFiles("*.jpg").Concat(di.GetFiles("*.bmp")).Concat(di.GetFiles("*.png")).Concat(di.GetFiles("*.gif")).ToArray
    18. 'Dim dra As IO.FileInfo
    19. frm = New Form
    20. frm.Name = "frm"
    21. FullSizePic = New PictureBox
    22. FullSizePic.Dock = DockStyle.Fill
    23. FullSizePic.BackColor = Color.Black
    24. FullSizePic.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom
    25. frm.Controls.Add(FullSizePic)
    26. AddHandler frm.KeyDown, AddressOf frm_keydown
    27. frm.Show()
    28. Timer1.Enabled = True
    29. EnterFullScreen(frm)
    30. GetnextImage()
    31. End If
    32. End Sub
    33. Private Sub GetnextImage()
    34. If Not ImageDir Is Nothing Then
    35. If ImageIndex < ImageDir.Length - 1 Then
    36. ImageIndex += 1
    37. FullSizePic.ImageLocation = ImageDir(ImageIndex).FullName
    38. ElseIf ImageIndex = ImageDir.Length - 1 Then
    39. ImageIndex = 0
    40. FullSizePic.ImageLocation = ImageDir(ImageIndex).FullName
    41. End If
    42. End If
    43. End Sub
    44. Public Sub LeaveFullScreen(ByVal targetForm As Form)
    45. If IsFullScreen Then
    46. ' Restore the original Window state.
    47. ' Uncomment the code if you does not want to close the slide show.
    48. 'targetForm.WindowState = FormWindowState.Normal
    49. ' targetForm.FormBorderStyle = FormBorderStyle.None
    50. ' targetForm.TopMost = topMost
    51. 'targetForm.Bounds = bounds
    52. IsFullScreen = False
    53. '
    54. Timer1.Enabled = False
    55. targetForm.Close()
    56. End If
    57. End Sub
    58. Public Sub EnterFullScreen(ByVal targetForm As Form)
    59. If Not IsFullScreen Then
    60. targetForm.WindowState = FormWindowState.Maximized
    61. targetForm.FormBorderStyle = FormBorderStyle.Sizable
    62. targetForm.TopMost = True
    63. targetForm.Bounds = Screen.GetBounds(targetForm)
    64. IsFullScreen = True
    65. End If
    66. End Sub
    67. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    68. GetnextImage()
    69. End Sub
    70. Private Sub frm_keydown()
    71. LeaveFullScreen(frm)
    72. End Sub
    73. End Class


    Ich hoffe ihr könnt mir helfen :)

    Vielen Dank.
    Hi!
    Ich glaub da bleibt nix anderes als den Ordner über einem Timer zu überwachen, also das man alle xxx Sekunden, Minuten etc. den Bilderordner neu einliest.
    Damit einher ist´s wohl auch unumgänglich die eingelesenen Bilder in einer List(Of FileInfo) oder List(Of Image) etc. zu speichern und somit dann neue Bilder zur Liste hinzuzufügen..
    ..meinetwegen auch ein Dictionary(Of FileInfo, Boolean) wobei Boolean für "schon angezeigt" steht! ;)
    @michach Dann zieh Dir einen FileSystemWatcher auf die GUI, konfiguriere ihn entsprechend (Verzeichnis, Extension, neue Dateien) und Du bekommst für jede neue Datei ein Event.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Man kann mit dem FileSystemWatcher den Ordner überwachen und sich benachrichtigen lassen. Ist recht simpel und man muss nicht mit nem Timer machen.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Ggf. nen FileSystemWatcher nutzen, der das Verzeichnis überwacht und sich meldet bzw. n Event feuert, wenn ne neue Datei hinzukommt.

    EDIT: Na, wenn 3 gleichzeitig das Gleiche sagen, dann kann's ja nicht so verkehrt sein :P
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    wenn 3 gleichzeitig das Gleiche sagen
    Das hab ich hier noch nicht erlebt. :thumbsup:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo zusammen.

    ja, damit habe ich schon gearbeitet und tatsächlich auch diesen Gedanken gehabt, wobei es bei mir etwas an der Umsetzung hapert.

    Ich habe schon mal damit etwas gebaut, da wird einfach immer eine Info geschickt sobald jemand etwas auf dem Netzwerkpfad ablegt, ändert, oder löscht.

    Aber wie ich das in das Script übernehmen kann, das ist etwas komplizierter, liegt wohl daran das ich halt kein Profie bin :D

    Hatte dann eher an eine Schleife im Ticker oder so gedacht die immer prüft ob etwas neues im Verzeichnis ist, also alle Sekunde zum Beispiel.
    @michach Timer ist suboptimal.
    Du musst natürlich nur dann ein Event auslösen, wenn eine neue Datei hinzukommt.
    Deren Pfadname bekommst Du im EventArg geliefert.
    Wenn Du in Deiner Firm alle Dateipfade in einer List(Of String) oder List(Of FileInfo) ablegst, musst Du beim Efent nur das neue Element anhängen und feddich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    michach schrieb:

    Nicht schön
    Was soll das?
    Meinst Du, ein Timer wäre schön?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    michach schrieb:

    meinen Code
    OK.
    Gibt es da noch (Verständnis-) Probleme?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Eigentlich nicht, ich sage mal so, es funktioniert, das ist das wichtigste.
    Der Code ist nur für mich, den lasse ich auf meinem Rechner laufen, daher ist hier auch Sicherheit nicht ganz so groß geschrieben :)

    Wenn es darum geht das wirklich richtig zu machen, dann bestimmt, weil ihr Profis das ganz sicher anders umgesetzt hättet.

    Wenn gewünscht, kann ich das gerne hier online stellen, wird aber etwas peinlich für mich :D

    michach schrieb:

    weil ihr Profis das ganz sicher anders umgesetzt hättet.
    Gewiss hätten wir den FileSystemWatcher verwendet und gewiss sähe unser Code anders aus.
    Wenn Du an besserem Code interessiert bist, kannst Du Dein Projekt (ohne Binaries) mal als ZIP anhängen und wir flöhen ihn dann mas durch.
    Da ist absolut nix peinlich bei. :thumbup:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!