Benutzer mit den meisten Antworten
FolderBrowserDialog: SelectedPath-Wert nicht befüllen?

Frage
-
Guten Tag,
zuerst würde ich euch gerne einen Teilcode zeigen:
Function dialog-Folder(){ $FolderBrowser = New-Object System.Windows.Forms.FolderBrowserDialog -Property @{ Description = "Please select the folder" RootFolder = "Desktop" } [void]$FolderBrowser.ShowDialog() $FolderBrowser.SelectedPath} $folderpath = dialog-Folder If ($folderpath -eq $NULL){ [System.Windows.Forms.MessageBox]::Show("No folder chosen!", "Error", 0, [System.Windows.Forms.MessageBoxIcon]::Error) exit } Else { Code }
Problem ist bei der If-Abfrage springt der Code immer zum Else-Block, weil die Variable $folderpath immer den Pfad zum Desktop beinhaltet, heißt die Variable ist nie leer, obwohl ich beim Dialogfenster auf Cancel, oder X klicke.
Wie kriege ich es hin, dass $folderpath leer ist, wenn ich nichts im Dialogfenster auswähle??
Vielen Dank im voraus.
MfG
Antworten
-
Jeder Formdialog gibt automatisch ein Ergebnis, ein Resultat (Dialogresult) zurück, je nachdem wie er geschlossen wurde. Im Falle deines Folderbrowserdialogs ist das "OK" ( = Button "OK" gedrückt), oder "Cancel" ( = Button "Abbrechen" oder "x" gedrückt).
Dieses Resultat wird normalerweise automatisch ausgegeben. Du hast die Ausgabe allerdings unterdrückt durch das "[void]" vor dem Aufruf. Wenn du also den Aufruf statt dessen einer Variable zuweist (oder direkt abfragst), kannst du ihn auswerten.
Z.b. so:
Function dialog-Folder(){ $FolderBrowser = New-Object System.Windows.Forms.FolderBrowserDialog -Property @{ Description = "Please select the folder" RootFolder = "Desktop" } $result = $FolderBrowser.ShowDialog() if ($result -ne "OK") { $null = [System.Windows.Forms.MessageBox]::Show("No folder chosen!", "Error", 0, [System.Windows.Forms.MessageBoxIcon]::Error) return } else { return $FolderBrowser.SelectedPath } } $folderpath = dialog-Folder
Im Falle des Fehler-Popups ist eine Unterdrückung ($null=) allerdings erwünscht, da $folderpath sonst das Resultat dieses Popups ("OK") enthalten würde.
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Kostenloser Powershell Snippet Manager v3: Link
(Schneller, besser + einfacher scripten.)
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 Mittwoch, 1. Juli 2015 23:07
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Montag, 6. Juli 2015 00:23
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 7. Juli 2015 14:33
Alle Antworten
-
Jeder Formdialog gibt automatisch ein Ergebnis, ein Resultat (Dialogresult) zurück, je nachdem wie er geschlossen wurde. Im Falle deines Folderbrowserdialogs ist das "OK" ( = Button "OK" gedrückt), oder "Cancel" ( = Button "Abbrechen" oder "x" gedrückt).
Dieses Resultat wird normalerweise automatisch ausgegeben. Du hast die Ausgabe allerdings unterdrückt durch das "[void]" vor dem Aufruf. Wenn du also den Aufruf statt dessen einer Variable zuweist (oder direkt abfragst), kannst du ihn auswerten.
Z.b. so:
Function dialog-Folder(){ $FolderBrowser = New-Object System.Windows.Forms.FolderBrowserDialog -Property @{ Description = "Please select the folder" RootFolder = "Desktop" } $result = $FolderBrowser.ShowDialog() if ($result -ne "OK") { $null = [System.Windows.Forms.MessageBox]::Show("No folder chosen!", "Error", 0, [System.Windows.Forms.MessageBoxIcon]::Error) return } else { return $FolderBrowser.SelectedPath } } $folderpath = dialog-Folder
Im Falle des Fehler-Popups ist eine Unterdrückung ($null=) allerdings erwünscht, da $folderpath sonst das Resultat dieses Popups ("OK") enthalten würde.
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Kostenloser Powershell Snippet Manager v3: Link
(Schneller, besser + einfacher scripten.)
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 Mittwoch, 1. Juli 2015 23:07
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Montag, 6. Juli 2015 00:23
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 7. Juli 2015 14:33