Die Handles-Klausel erfordert eine WithEvents-Variable und ähnliches...

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von kwon.

    Die Handles-Klausel erfordert eine WithEvents-Variable und ähnliches...

    Hallo liebe Profis,

    ich bin ein Hobby-Programmierer und schreibe auch Skripte, die mir meine berufliche Arbeit leichter machen.

    Jetzt ist u.a. der oben genannte Fehler aufgetreten und ich kann (auch durch googlen) nicht wirklich einschätzen, was ich tun muss, um die Fehler zu beheben.

    Schade ist, dass mein Skript aus bis zu 6 Formen besteht - es steckt viel Arbeit in den anderen Forms drin...

    Ich habe zwar Backups, aber es wäre schön, wenn man die Fehler beheben könnte...

    Ich weiß gar nicht, wie die Zeilen (6 - 9), (36 - 70) in meinen Code geraten sind.

    Der restliche Code ist von mir geschrieben worden.

    Die Fehler treten nur in Form6 auf:
    Zeile: 12, 37, 73, 38, 39, 44, 45, 46, 47, 48, 49, 50, 54, 55, 56, 57, 58, 59, 60, 65, 66

    Es wäre super, wenn mir jemand helfen könnte...

    Vielen Dank im Voraus...

    Hier Form6:

    VB.NET-Quellcode

    1. ​Option Strict On
    2. Imports System.IO
    3. Public Class Form6
    4. Dim pfadZuExtrahierender_S8_Film As String = "C:\ffmpeg\bin\S8-Film\", pfad_extrahierte_Bilder As String = "C:\ffmpeg\bin\extrahierte_Bilder\"
    5. Dim ordnerS8_Film As New DirectoryInfo(pfadZuExtrahierender_S8_Film), ordnerExtrahierte_Bilder As New DirectoryInfo(pfad_extrahierte_Bilder)
    6. Friend WithEvents ButtonBilderExtrahieren As Button
    7. Friend WithEvents ButtonFilmLaden As Button
    8. Friend WithEvents Label1 As Label
    9. Friend WithEvents Button1 As Button
    10. Private Sub ButtonBilderExtrahieren_Click(sender As Object, e As EventArgs) Handles ButtonBilderExtrahieren.Click
    11. Dim p As New Process()
    12. Dim S8_Film_Name As String = ""
    13. If ordnerS8_Film.GetFiles.Count <> 1 Then
    14. MessageBox.Show("Es befindet sich kein (oder mehr als ein) zu extrahierender S8-Film im S8-Film-Ordner. Das Programm wird beendet.")
    15. Exit Sub
    16. End If
    17. If ordnerExtrahierte_Bilder.GetFiles.Count <> 0 Then
    18. MessageBox.Show("Es befinden sich noch Bilder im Export-Ordner. Das Programm wird beendet.")
    19. Exit Sub
    20. End If
    21. MessageBox.Show("Der Export dauert eine Weile. Bitte warten...")
    22. S8_Film_Name = ordnerS8_Film.GetFiles.First.Name
    23. p.StartInfo.UseShellExecute = False
    24. p.StartInfo.FileName = "C:\ffmpeg\bin\ffmpeg.exe"
    25. p.StartInfo.Arguments = " -i C:\ffmpeg\bin\S8-Film\" & S8_Film_Name & " -r 20 C:\ffmpeg\bin\extrahierte_Bilder\img-%06d.png"
    26. p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
    27. p.StartInfo.CreateNoWindow = True
    28. p.Start()
    29. p.WaitForExit()
    30. MessageBox.Show("Die Bilder wurden extrahiert.")
    31. End Sub
    32. Private Sub InitializeComponent()
    33. Me.ButtonFilmLaden = New System.Windows.Forms.Button()
    34. Me.Label1 = New System.Windows.Forms.Label()
    35. Me.SuspendLayout()
    36. '
    37. 'ButtonFilmLaden
    38. '
    39. Me.ButtonFilmLaden.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
    40. Me.ButtonFilmLaden.Location = New System.Drawing.Point(52, 65)
    41. Me.ButtonFilmLaden.Name = "ButtonFilmLaden"
    42. Me.ButtonFilmLaden.Size = New System.Drawing.Size(114, 40)
    43. Me.ButtonFilmLaden.TabIndex = 0
    44. Me.ButtonFilmLaden.Text = "Film laden"
    45. Me.ButtonFilmLaden.UseVisualStyleBackColor = True
    46. '
    47. 'Label1
    48. '
    49. Me.Label1.AutoSize = True
    50. Me.Label1.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
    51. Me.Label1.Location = New System.Drawing.Point(49, 18)
    52. Me.Label1.Name = "Label1"
    53. Me.Label1.Size = New System.Drawing.Size(106, 20)
    54. Me.Label1.TabIndex = 1
    55. Me.Label1.Text = "S8-Film laden"
    56. '
    57. 'Form6
    58. '
    59. Me.ClientSize = New System.Drawing.Size(634, 392)
    60. Me.Controls.Add(Me.Label1)
    61. Me.Controls.Add(Me.ButtonFilmLaden)
    62. Me.Name = "Form6"
    63. Me.ResumeLayout(False)
    64. Me.PerformLayout()
    65. End Sub
    66. Private Sub ButtonFilmLaden_Click(sender As Object, e As EventArgs) Handles ButtonFilmLaden.Click
    67. 'Film auswählen, der analysiert werden soll
    68. '(Weil nicht jeder Film Hänger beinhaltet!!)
    69. Dim DateiPfad As String = ""
    70. Dim FilmName As String = ""
    71. Dim MeinOpenFileDialog As New OpenFileDialog()
    72. If ordnerS8_Film.GetFiles.Count >= 1 Then
    73. MessageBox.Show("Es befindet sich ein (oder mehrere) zu extrahierende(r) S8-Film im S8-Film-Ordner. Das Programm wird beendet.")
    74. Exit Sub
    75. End If
    76. If MeinOpenFileDialog.ShowDialog() = DialogResult.OK Then
    77. DateiPfad = MeinOpenFileDialog.FileName
    78. FilmName = Path.GetFileName(DateiPfad)
    79. 'pfadHerkunft = Path.GetDirectoryName(MeinOpenFileDialog.FileName)
    80. My.Computer.FileSystem.CopyFile(DateiPfad, pfadZuExtrahierender_S8_Film & FilmName, FileIO.UIOption.AllDialogs, FileIO.UICancelOption.DoNothing)
    81. End If
    82. End Sub
    83. Private Sub ButtonFilmLöschen_Click(sender As Object, e As EventArgs) Handles ButtonFilmLöschen.Click
    84. For Each f In ordnerS8_Film.GetFiles()
    85. f.Delete()
    86. Next
    87. MessageBox.Show("Der Film wurde gelöscht.")
    88. End Sub
    89. Private Sub ButtonBilderLöschen_Click(sender As Object, e As EventArgs) Handles ButtonBilderLöschen.Click
    90. For Each f In ordnerExtrahierte_Bilder.GetFiles
    91. f.Delete()
    92. Next
    93. MessageBox.Show("Die Bilder wurden gelöscht.")
    94. End Sub
    95. End Class
    @kwon Mach Dir eine neue Form6 und gestalte die GUI im Designer.
    Dann sollte das nicht mehr passieren.
    Das mit Process p ist unklar.
    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!
    Da hat sich wohl ein kleiner Unfall ergeben. Der Großteil sollte in einer eigenen Datei namens Form6.Designer.vb sein. Kopiere Dir die Zeilen#4-#5, #11-#35, #72-#101 in eine Textdatei, lösch die oben gezeigte Datei, erstell - wie RfG meinte - eine neue Form6 (schleußliche Benennung!) Datei und dann kannst Du den kopierten Code da rein packen. Die Designer könnte man mit den restlichen Codezeilen wohl auch wiederherstellen. Aber eines nach dem anderen.
    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.
    Hallo RodFromGermany,
    Hallo VaporiZed,

    @RodFromGermany oder @VaporiZed:

    Danke nochmals für die Hilfe!!

    Habe ich das richtig verstanden?:

    Also ich kopiere den für mich relevanten Code, lösche Form6.vb, designe eine neue Form6 und kopiere den Code da rein...

    Aber "Form6.resx" und "Form6.Designer.vb" soll ich NICHT löschen, oder?

    Vielen Dank nochmals...

    kwon schrieb:

    lösche Form6.vb
    "Form6.resx" und "Form6.Designer.vb" sind unmittelbar Bestandteil von Form6.
    Gib der neuen Form einen sinnvollen Namen.
    Wenn Du fertig bist, löschst Du alle 3 Dateien.
    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!