none
FolderBrowserDialog: SelectedPath-Wert nicht befüllen? RRS feed

  • 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

    Dienstag, 30. Juni 2015 13:02

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.

    Mittwoch, 1. Juli 2015 22:54
    Moderator

Alle Antworten

  • Versuche es mal so:

    If ($folderpath -eq ""){
        [System.Windows.Forms.MessageBox]::Show("No folder chosen!", "Error", 0, [System.Windows.Forms.MessageBoxIcon]::Error)
        exit
    }

    Gruß
    Christoph

    Dienstag, 30. Juni 2015 13:40
  • 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.

    Mittwoch, 1. Juli 2015 22:54
    Moderator