Benutzer mit den meisten Antworten
Script mittels Button starten und anschließen Form schließen geht nicht

Frage
-
Hallo,
mit einem kleinen Script füttere ich ffmpeg zum Rechnen von Video-Clips. Es gibt zwei Arten von Abläufen, die ich am Anfang innerhalb einen Form mittels Buttons starten lassen möchte. Allerdings bekomme ich es nicht hin, dass nach dem Drücken eines Buttons die Abfrage verschwindet und das entsprechende Script bzw. die Funktion dann startet. Außerdem schmiert mir die Shell ab, wenn ich den FolderBrowserDialog bzw. den OpenFileDialog, der nach dem klicken der Buttons aufgeht, wieder schließe. Die Fehlermeldung hierzu:
[...] Habe den riesigen Fehlertext gesnippt. Hilft uns nicht weiter / Denniver [...]
Und hier das Script (vermutlich wahnsinnig umständlich geschrieben, aber die Shell und ich sind erst seit kurzem Freunde):
Was mache ich falsch?
- Bearbeitet Denniver ReiningMVP, Moderator Dienstag, 12. August 2014 00:49 Fehlertext gelöscht.
- Bearbeitet mqlmann Donnerstag, 28. September 2017 20:32 veraltet
Antworten
-
Also bei "zusammenfassen" passiert genau was du oben beschrieben hast wie es sein soll. Bei "Einzeln", sehe ich gerade hast du die Klammern hinter close vergessen:
$EinzelnButton.Add_Click({ClipsEinzeln;$objForm.close})
muss heissen:
$EinzelnButton.Add_Click({ClipsEinzeln;$objForm.close()})
Auch fällt mit eben erst auf das du für den Filedialog noch eine extra Form erstellst, das ist nicht nur überflüssig sondern könnte auch dein Problem gewesen sein. So läuft's bei mir fehlerfrei:
function ZielDateiAuswahl { # Datei-Auswahl-Dialog $DateiAuswahl = New-Object System.Windows.Forms.SaveFileDialog $DateiAuswahl.ShowHelp = $true $DateiAuswahl.Title = "JR Proxytool - Zieldatei auswählen:" $DateiAuswahl.InitialDirectory = "$env:USERPROFILE\Desktop\" $DateiAuswahl.Filter = "mp4 Proxy-Clip (*.mp4)|*.mp4" if ($DateiAuswahl.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK){ return $DateiAuswahl.FileName } else { } }
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
!NEU! Powershell Codesnippet Manager 3: Link
Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
Warum das Ganze? Hier gibts die Antwort.- Bearbeitet Denniver ReiningMVP, Moderator Dienstag, 12. August 2014 00:43
- Als Antwort markiert mqlmann Dienstag, 12. August 2014 20:03
Alle Antworten
-
Lieber mqlmann, du kannst nicht erwarten das sich hier jemand ne Stunde Zeit nimmt, um sich durch dein Script zu arbeiten und den Fehler zu finden.
Ich rate dir folgendes, versuche das Problem mit dem kleinstmöglichen Script (Form,Button, Dialog ohne alle überflüssigen Properties) nachzustellen. Mit ein wenig Glück hilft dir das schon selbst auf den Lösungsweg. Wenn nicht poste das nochmal hier.Zwei konkrete Tips habe ich aber. Zum Einen: du startest dein Script im "-STA"-Modus, ja?
Zweitens, ich erinnere mich dunkel das es einen seltsamen Bug mit den Dateidialogen gab, der zum Crash führen konnte wenn folgendes Property nicht gesetzt war:
$mydialog.ShowHelp = $true
also bei dir:
$DateiAuswahl = New-Object system.Windows.Forms.SaveFileDialog $DateiAuswahl.ShowHelp = $true
Falls das nicht hilft, gilt was ich oben vorgeschlagen habe.
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
!NEU! Powershell Codesnippet Manager 3: Link
Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
Warum das Ganze? Hier gibts die Antwort.- Als Antwort vorgeschlagen Alex Pitulice Freitag, 8. August 2014 08:06
- Nicht als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Dienstag, 12. August 2014 00:45
-
Hallo Denniver,
vielen Dank für Deine Antwort. Ich habe mitnichten erwartet, dass hier jemand mein Script durcharbeitet - viel mehr hatte ich gehofft, dass grobe Fehler - meiner Unerfahrenheit mit der Shell geschuldet - den Profis gleich ins Auge stechen.
In jedem Fall habe ich Deine Tipps versucht:
"-STA" Modus ist doch automatisch aktiv, wenn ich das Script über die ISE aufrufe, richtig?
$DateiAuswahl.ShowHelp = $true
Hat leider keine Veränderung gebracht.
Ich habe das Script jetzt auf zwei Punkte runtergebrochen: Die Form für die Abfrage und einen einfachen SaveFileDialog. Selbst hier bleibt das Problem bestehen und die Form der Abfrage schließt sich einfach nicht nach dem Aufruf des SaveFileDialog. Hier nochmal das "abgespeckte" Script:
- Bearbeitet mqlmann Donnerstag, 28. September 2017 20:32 veraltet
-
"-STA" Modus ist doch automatisch aktiv, wenn ich das Script über die ISE aufrufe, richtig?
Im ISE ja, bei der Console (powershell.exe) erst seit v3.
Darüberhinaus habe ich das untere Script bei mir getestet und habe weder Abstürze beim Save-Dialog noch irgendwelche anderen Besonderheiten. Nachdem der Save-Dialog geschlossen wurde, egal ob durch Cancel oder nach Eingabe eines Filenames geht der Dialog weg und die Form verschwindet.
Falls das nicht das gewünschte Verhalten ist, beschreibe bitte mal Schritt für Schritt was das Script in welchem Fall machen soll und nicht macht.
Generell: wenn du die Form verstecken möchtest aber das Script noch weiter arbeiten soll, benutze statt "$objform.close()", "$objform.hide()"
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
!NEU! Powershell Codesnippet Manager 3: Link
Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
Warum das Ganze? Hier gibts die Antwort. -
Hallo Denniver,
mein "Wunschablauf" wäre dieser:
- Abfrageform ($objForm) wird dargestelt
- nach klicken auf einen der Buttons wird die entsprechende Funktion (im obigen Beispiel "function ZielDateiAuswahl") aufgerufen und
- zeitgleich die Abfrageform geschlossen. Hierbei ist es mir gleich, ob das durch $objForm.close oder $objForm.hide passiert.
Was ich einfach nicht verstehe ist, dass die Form nach dem Klick auf einen der Buttons mit
$ZusammenFassenButton.Add_Click({ZielDateiAuswahl;$objForm.hide()})
oder$ZusammenFassenButton.Add_Click({ZielDateiAuswahl;$objForm.close()})
nicht verschwindet. In einem anderen Script funktioniert das problemlos.
"Darüberhinaus habe ich das untere Script bei mir getestet und habe weder Abstürze beim Save-Dialog noch irgendwelche anderen Besonderheiten."
Die Abstürze beim Schließen des Save-Dialogs habe ich mit dem Einfügen von "return" wegbekommen:
function ZielDateiAuswahl { # Datei-Auswahl-Dialog [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null $DateiAuswahlRoot = New-Object System.Windows.Forms.Form $DateiAuswahlRoot.TopMost = $true $DateiAuswahl = New-Object System.Windows.Forms.SaveFileDialog $DateiAuswahl.Title = "JR Proxytool - Zieldatei auswählen:" $DateiAuswahl.InitialDirectory = "$env:USERPROFILE\Desktop\" $DateiAuswahl.Filter = "mp4 Proxy-Clip (*.mp4)|*.mp4" if ($DateiAuswahl.ShowDialog($DateiAuswahlRoot) -eq [System.Windows.Forms.DialogResult]::OK){ return $DateiAuswahl.FileName } else { return exit } }
Viele Grüße
- Bearbeitet mqlmann Montag, 11. August 2014 17:55
-
Also bei "zusammenfassen" passiert genau was du oben beschrieben hast wie es sein soll. Bei "Einzeln", sehe ich gerade hast du die Klammern hinter close vergessen:
$EinzelnButton.Add_Click({ClipsEinzeln;$objForm.close})
muss heissen:
$EinzelnButton.Add_Click({ClipsEinzeln;$objForm.close()})
Auch fällt mit eben erst auf das du für den Filedialog noch eine extra Form erstellst, das ist nicht nur überflüssig sondern könnte auch dein Problem gewesen sein. So läuft's bei mir fehlerfrei:
function ZielDateiAuswahl { # Datei-Auswahl-Dialog $DateiAuswahl = New-Object System.Windows.Forms.SaveFileDialog $DateiAuswahl.ShowHelp = $true $DateiAuswahl.Title = "JR Proxytool - Zieldatei auswählen:" $DateiAuswahl.InitialDirectory = "$env:USERPROFILE\Desktop\" $DateiAuswahl.Filter = "mp4 Proxy-Clip (*.mp4)|*.mp4" if ($DateiAuswahl.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK){ return $DateiAuswahl.FileName } else { } }
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
!NEU! Powershell Codesnippet Manager 3: Link
Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
Warum das Ganze? Hier gibts die Antwort.- Bearbeitet Denniver ReiningMVP, Moderator Dienstag, 12. August 2014 00:43
- Als Antwort markiert mqlmann Dienstag, 12. August 2014 20:03
-
Hallo Denniver,
Egal wie ich es angehe, bei mir bleibt die $objForm immer hinter dem SaveFileDialog offen.
Die Extraform für den SaveFileDialog brauche ich um sicherzustellen, dass Selbiger auch TopMost geöffnet wird. Die fehlenden Klammer hinterm .close fehlen nur in der Kopie des Codeblocks - daran kanns also auch nicht liegen.
Dann werde ich wohl noch weiter probieren müssen. In jedem Fall:
vielen Dank für Deine Hilfe!
- Bearbeitet mqlmann Dienstag, 12. August 2014 20:03