Progressbar mit For Schleife

  • VB.NET

Es gibt 29 Antworten in diesem Thema. Der letzte Beitrag () ist von Eiskaffee.

    Progressbar mit For Schleife

    Hallihallo!

    Ich stehe nun seit Stunden vor einem - hoffe ich - simplen Problem.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim maxi As Integer = 0
    3. Dim appRef As Photoshop.Application
    4. Dim currentDoc As Photoshop.Document
    5. Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
    6. If TextBox1.Text = "" Then
    7. MsgBox("Bitte erst Ordner auswählen!")
    8. End If
    9. Dim files() As String = IO.Directory.GetFiles(TextBox1.Text, "*.psd")
    10. ProgressBar1.Maximum = maxi
    11. ProgressBar1.Step = 1
    12. Dim minimum As Integer
    13. maxi = files.Count
    14. Try
    15. For minimum = 0 To maxi
    16. For Each fl As String In files
    17. currentDoc = appRef.Open(fl)
    18. appRef.DoAction("Zuschneiden", "BWS")
    19. Dim jpeg As New Photoshop.JPEGSaveOptions
    20. jpeg.Quality = 12
    21. currentDoc.SaveAs(TextBox2.Text + "\" + _
    22. IO.Path.GetFileName(fl), jpeg, False, 2)
    23. currentDoc.Close(PsSaveOptions.psDoNotSaveChanges)
    24. Next fl
    25. ProgressBar1.PerformStep()
    26. ProgressBar1.Refresh()
    27. ProgressBar1.Value = ProgressBar1.Maximum
    28. Label1.Text = ProgressBar1.Value
    29. Next
    30. Catch ex As Exception
    31. MsgBox("Fehler")
    32. End Try
    33. End Sub
    34. End Class


    Folgendes will ich erreichen:

    Bei jedem durchlaufen der Forschleife soll sich der Ladebalken füllen.
    Die Funktion die drinsteht bewirkt eine Stapelverarbeitung in Photoshop von Dateien die ich mit einem FolderBrowserDialog auswähle, das funktioniert top.

    Die Anzahl der Dateien (also ProgressBar1.Maximum) lege ich ja mit "maxi = files.Count" fest oder?
    Paar zeilen drüber hab ich ja festgelegt dass diese "files" ja die Dateien aus dem Pfad in der Textbox1 sind.

    Es tut sich aber einfach rein GARNICHTS, die Stapelverarbeitung in Photoshop läuft, der Ladebalken bewegt sich kein Stück.

    Jede Hilfe ist nützlich, danke!

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports Photoshop
    3. Imports System.IO
    4. Public Class Form1
    5. Dim maxi As Integer = 0
    6. Dim appRef As Photoshop.Application
    7. Dim currentDoc As Photoshop.Document
    8. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    9. appRef = New Application
    10. appRef.Visible = True
    11. appRef.DisplayDialogs = PsDialogModes.psDisplayNoDialogs
    12. appRef.PlaybackDisplayDialogs = PsDialogModes.psDisplayNoDialogs
    13. For Each c As String In IO.Directory.GetFiles(TextBox1.Text, "*.psd") ' zeahlt die datein damit ich ein echtes progressanzeige kriege
    14. maxi = maxi + 1
    15. Next c
    16. End Sub
    17. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    18. Dim Open1 = New FolderBrowserDialog()
    19. With Open1
    20. .Description = "Wähle einen Ordner mit PSD Dateien"
    21. .ShowNewFolderButton = True
    22. If TextBox1.Text = "" Then
    23. .SelectedPath = "N:\"
    24. Else
    25. .SelectedPath = TextBox1.Text
    26. End If
    27. .ShowDialog()
    28. End With
    29. TextBox1.Text = Open1.SelectedPath
    30. End Sub
    31. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    32. Dim Save1 = New FolderBrowserDialog()
    33. With Save1
    34. If TextBox2.Text = "" Then
    35. .SelectedPath = TextBox1.Text
    36. Else
    37. .SelectedPath = "N:\"
    38. End If
    39. End With
    40. Dim result As DialogResult = Save1.ShowDialog()
    41. If (result = DialogResult.OK) Then
    42. TextBox2.Text = Save1.SelectedPath
    43. End If
    44. End Sub
    45. Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
    46. '########1. DURCHLAUF #########
    47. If TextBox1.Text = "" Then
    48. MsgBox("Bitte erst Ordner auswählen!")
    49. End If
    50. Dim files() As String = IO.Directory.GetFiles(TextBox1.Text, "*.psd")
    51. ProgressBar1.Maximum = maxi
    52. ProgressBar1.Step = 1
    53. Dim minimum As Integer
    54. maxi = files.Count
    55. Try
    56. For minimum = 0 To maxi
    57. For Each fl As String In files
    58. currentDoc = appRef.Open(fl)
    59. appRef.DoAction("Zuschneiden", "BWS")
    60. Dim jpeg As New Photoshop.JPEGSaveOptions
    61. jpeg.Quality = 12
    62. currentDoc.SaveAs(TextBox2.Text + "\" + _
    63. IO.Path.GetFileName(fl), jpeg, False, 2)
    64. currentDoc.Close(PsSaveOptions.psDoNotSaveChanges)
    65. Next fl
    66. ProgressBar1.PerformStep()
    67. ProgressBar1.Refresh()
    68. ProgressBar1.Value = ProgressBar1.Maximum
    69. 'Label1.Text = ProgressBar1.Value
    70. Next
    71. Catch ex As Exception
    72. MsgBox("Fehler")
    73. End Try
    74. End Sub
    75. End Class


    Das ist der Komplette code
    Moin,

    @Dani=mc^2 Inwiefern sollte die Designerdatei wichtig sein?
    @TE: Wenn Du Option Strict an hast, dann sollten Fehler auftauchen, die Du zunächst sauber beheben solltest.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Ich kenn mich eigentlich fast garnicht aus in Visual basic...
    Daher können da schon sinnlose sachen drin stehen ;)

    Ist es nicht ganze infach umsetzbar, dass mit jeder Forschleife der Ladebalken eben zunimmt?
    Wäre top wenn jemand das ganz einfach beschreibt und nicht nur kommt was falsch ist ;)
    Ja, einfach die Value inkrementieren. Allerdings ist Dein Code immer noch Strict Off und das solltest Du schnell beheben.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Inkrementiert (to increase) heißt, dass die Zahl immer um einen bestimmten Wert (normal 1) größer wird.
    Zum Thema Strict On: Wie hast Du die Fehler behoben?

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Bei einem einfach Beispiel, wie sag ich da dass die Progressbar mit der Forschleife mitläuft?

    VB.NET-Quellcode

    1. Dim maxi as Integer = 0
    2. for Each c As String In IO.Directory.GetFiles(TextBox1.Text, "*.psd")
    3. maxi = maxi + 1
    4. Next c
    5. Progressbar1.Maximum = maxi
    6. For each 'bedingung
    7. 'da kommt meine photoshop funktion rein
    8. Next
    9. 'wo und wie sag ich der ProgressBar1 dass sie mit der Schleife größer wird?


    Was für Fehler denn?
    Du sollst die ​Value inkrementieren, wie ich bereits sagte.

    Eiskaffee schrieb:

    Was für Fehler denn?

    Du musst Fehler bekommen haben, denn mit Strict On kompiliert unter anderem sowas (​Label1.Text = ProgressBar1.Value) nicht.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    VB.NET-Quellcode

    1. Dim maxi as Integer = 0
    2. for Each c As String In IO.Directory.GetFiles(TextBox1.Text, "*.psd")
    3. maxi = maxi + 1
    4. Next c
    5. Progressbar1.Maximum = maxi
    6. For each 'bedingung
    7. 'da kommt meine photoshop funktion rein
    8. ProgressBar1.Value = ProgressBar1.Value + 1
    9. Next
    10. 'wo und wie sag ich der ProgressBar1 dass sie mit der Schleife größer wird?


    So oder wie?

    und ja, die Fehler die ich bekommen habe habe ich behoben
    Richtig, das kann man btw mit ​ProgressBar1.Value += 1 abkürzen.

    Eiskaffee schrieb:

    die Fehler die ich bekommen habe habe ich behoben

    Zeig mal. ^^

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Eiskaffee schrieb:

    So oder wie?
    Was genau soll in diesem Programm passieren?
    Und

    VB.NET-Quellcode

    1. ProgressBar1.Increment(1)

    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!