none
FRAGE: Powershell GUI Auswahl aus Explorer und Übergabe des Wertes an ein Label Feld RRS feed

  • Frage

  • Hallo Powershell Forum,

    ich mache gerade meine ersten Gehversuche eine GUI in Powershell zu erstellen. Ich möchte in dem beigefügtem Script eine CSV-Datei aus dem Explorer auswählen und in ein Labelfeld schreiben. Diese Variable möchte ich später weiterverwenden. Die Oberfläche konnte ich umsetzten. Ebenso den Explorer Aufruf. Jedoch weiß ich nicht wie ich den Dateinamen mit Pfad in das Label Feld schreibe.

    Kann mich hierbei jemand unterstützen?

        
    Add-Type -AssemblyName System.Drawing
    
    
    # -----------------------------------------------------------------------------------------
    # Function
    # -----------------------------------------------------------------------------------------
    
    
        Function fun_import_csv_path ()
        {
            $import_csv_path = New-Object System.Windows.Forms.OpenFileDialog -Property @{
            InitialDirectory = [Environment]::GetFolderPath('Desktop')
            Filter = 'SpreadSheet (*.xlsx)|*.xlsx'
            }
        $null = $import_csv_path.ShowDialog()
        $import_csv = $import_csv_path.FileName
        write-host $import_csv
    
        return $import_csv
        }
    
    
    # -----------------------------------------------------------------------------------------
    # Generate Formular
    # -----------------------------------------------------------------------------------------
    Function Generate-Form {
           <#
        Generate Formular
        #>
    
    
        $Form = New-Object system.Windows.Forms.Form
        $Form.Size = '640,270'
        $Form.text = "Test Formular"
        $Form.TopMost  = $false
    
    
    # -----------------------------------------------------------------------------------------
    # Add import-csv Textbox
    # -----------------------------------------------------------------------------------------
        $txt_import_csv_file             = New-Object system.Windows.Forms.TextBox
        $txt_import_csv_file.multiline   = $false
        $txt_import_csv_file.text        = "Import CSV:"
        $txt_import_csv_file.width       = 150
        $txt_import_csv_file.height      = 20
        $txt_import_csv_file.location    = New-Object System.Drawing.Point(20,80)
        $txt_import_csv_file.Font        = 'Courier New,10'
        $Form.Controls.Add($txt_import_csv_file)
    
    # -----------------------------------------------------------------------------------------
    # Add import-csv Label
    # -----------------------------------------------------------------------------------------
        $lbl_import_csv                  = New-Object system.Windows.Forms.Label
        $lbl_import_csv.text             = "C:\temp\test.csv"
        $lbl_import_csv.BackColor        = "#ffffff"
        $lbl_import_csv.AutoSize         = $false
        $lbl_import_csv.width            = 300
        $lbl_import_csv.height           = 20
        $lbl_import_csv.location         = New-Object System.Drawing.Point(200,80)
        $lbl_import_csv.Font             = 'Courier New,10'
        $Form.Controls.Add($lbl_import_csv)
    
    
    # -----------------------------------------------------------------------------------------
    # Add import-csv Button
    # -----------------------------------------------------------------------------------------
        $but_import_csv                  = New-Object system.Windows.Forms.Button
        $but_import_csv.BackColor        = "#ffffff"
        $but_import_csv.text             = "Select"
        $but_import_csv.width            = 80
        $but_import_csv.height           = 20
        $but_import_csv.location         = New-Object System.Drawing.Point(530,80)
        $but_import_csv.Font             = 'Courier New,10,style=Bold,Underline'
        $but_import_csv.ForeColor        = "#000000"
        $Form.Controls.Add($but_import_csv)
    
        $but_import_csv.add_MouseClick({$txt_import_csv_file = fun_import_csv_path})
    
    
    # -----------------------------------------------------------------------------------------
    # Main
    # -----------------------------------------------------------------------------------------
    
             #Show the Form 
        $form.ShowDialog()| Out-Null 
    
     } #End Function 
    
     #Call the Function 
    Generate-Form


    • Bearbeitet Jan Nied Mittwoch, 19. Februar 2020 08:36 Überarbeitung
    Mittwoch, 19. Februar 2020 07:52

Antworten

  • Hallo Jan,

    wenn ich dich recht verstehe, willst du das Ergebnis aus fun_import_csv_path beim aufrufen deines Formulares in den Label $lbl_import_csv übergeben... das machst du grundsätzlich mit 

    $lbl_import_csv.text = $import_csv

    Da aber die import_csv Variable nicht aus der Form-Funktion stammt, ist diese dort nicht verfügbar. Du musst daher den code wie folgt ändern:

    Add-Type -AssemblyName System.Drawing
    Add-Type -AssemblyName System.Windows.Forms
    
    # -----------------------------------------------------------------------------------------
    # Run open File Dialog
    # -----------------------------------------------------------------------------------------
    Function fun_import_csv_path ()
        {
            $import_csv_path = New-Object System.Windows.Forms.OpenFileDialog -Property @{
            InitialDirectory = [Environment]::GetFolderPath('Desktop')
            Filter = 'SpreadSheet (*.xlsx)|*.xlsx'
            }
        $null = $import_csv_path.ShowDialog()
        $import_csv = $import_csv_path.FileName
        write-host $import_csv
    
        return $import_csv
        }
    
    # -----------------------------------------------------------------------------------------
    # Generate Formular
    # -----------------------------------------------------------------------------------------
    Function Generate-Form {
           <#
        Generate Formular
        #>
    
        param([string]$DateiPFad)
    
        $Form = New-Object system.Windows.Forms.Form
        $Form.Size = '640,270'
        $Form.text = "Test Formular"
        $Form.TopMost  = $false
    
    
    # -----------------------------------------------------------------------------------------
    # Add import-csv Textbox
    # -----------------------------------------------------------------------------------------
        $txt_import_csv_file             = New-Object system.Windows.Forms.TextBox
        $txt_import_csv_file.multiline   = $false
        $txt_import_csv_file.text        = "Import CSV:"
        $txt_import_csv_file.width       = 150
        $txt_import_csv_file.height      = 20
        $txt_import_csv_file.location    = New-Object System.Drawing.Point(20,80)
        $txt_import_csv_file.Font        = 'Courier New,10'
        $Form.Controls.Add($txt_import_csv_file)
    
    # -----------------------------------------------------------------------------------------
    # Add import-csv Label
    # -----------------------------------------------------------------------------------------
        $lbl_import_csv                  = New-Object system.Windows.Forms.Label
        $lbl_import_csv.text             = $DateiPFad
        $lbl_import_csv.BackColor        = "#ffffff"
        $lbl_import_csv.AutoSize         = $false
        $lbl_import_csv.width            = 300
        $lbl_import_csv.height           = 20
        $lbl_import_csv.location         = New-Object System.Drawing.Point(200,80)
        $lbl_import_csv.Font             = 'Courier New,10'
        $Form.Controls.Add($lbl_import_csv)
    
    
    # -----------------------------------------------------------------------------------------
    # Add import-csv Button
    # -----------------------------------------------------------------------------------------
        $but_import_csv                  = New-Object system.Windows.Forms.Button
        $but_import_csv.BackColor        = "#ffffff"
        $but_import_csv.text             = "Select"
        $but_import_csv.width            = 80
        $but_import_csv.height           = 20
        $but_import_csv.location         = New-Object System.Drawing.Point(530,80)
        $but_import_csv.Font             = 'Courier New,10,style=Bold,Underline'
        $but_import_csv.ForeColor        = "#000000"
        $Form.Controls.Add($but_import_csv)
    
        $but_import_csv.add_MouseClick({$txt_import_csv_file = fun_import_csv_path})
    
    
    # -----------------------------------------------------------------------------------------
    # Main
    # -----------------------------------------------------------------------------------------
    
             #Show the Form 
        $form.ShowDialog()| Out-Null 
    
     } #End Function 
    
    
    
     Generate-Form(fun_import_csv_path)

    Mittwoch, 19. Februar 2020 08:59

Alle Antworten

  • Hi,

    könntest du den Code bitte als Code formatieren (Der zweite Button von rechts im Editor Fenster.)? 

    Jedoch weiß ich nicht wie ich den Dateinamen mit Pfad in das Label Feld schreibe.

    Was meinst du damit? Was willst du denn mit dem Dateinamen und dem Pfad machen?

    Gruß

    Mittwoch, 19. Februar 2020 08:23
  • Hi,

    Ich möchte gerne den ausgewählten Wert weiterverarbeiten. Konkret möchte ich die ausgewählte CSV-Datei als Importdatei weiter nutzen. Ich hoffe ich habe mich verständlich ausgedrückt. :)

    Gruß

    Jan

    Mittwoch, 19. Februar 2020 08:39
  • Hallo Jan,

    wenn ich dich recht verstehe, willst du das Ergebnis aus fun_import_csv_path beim aufrufen deines Formulares in den Label $lbl_import_csv übergeben... das machst du grundsätzlich mit 

    $lbl_import_csv.text = $import_csv

    Da aber die import_csv Variable nicht aus der Form-Funktion stammt, ist diese dort nicht verfügbar. Du musst daher den code wie folgt ändern:

    Add-Type -AssemblyName System.Drawing
    Add-Type -AssemblyName System.Windows.Forms
    
    # -----------------------------------------------------------------------------------------
    # Run open File Dialog
    # -----------------------------------------------------------------------------------------
    Function fun_import_csv_path ()
        {
            $import_csv_path = New-Object System.Windows.Forms.OpenFileDialog -Property @{
            InitialDirectory = [Environment]::GetFolderPath('Desktop')
            Filter = 'SpreadSheet (*.xlsx)|*.xlsx'
            }
        $null = $import_csv_path.ShowDialog()
        $import_csv = $import_csv_path.FileName
        write-host $import_csv
    
        return $import_csv
        }
    
    # -----------------------------------------------------------------------------------------
    # Generate Formular
    # -----------------------------------------------------------------------------------------
    Function Generate-Form {
           <#
        Generate Formular
        #>
    
        param([string]$DateiPFad)
    
        $Form = New-Object system.Windows.Forms.Form
        $Form.Size = '640,270'
        $Form.text = "Test Formular"
        $Form.TopMost  = $false
    
    
    # -----------------------------------------------------------------------------------------
    # Add import-csv Textbox
    # -----------------------------------------------------------------------------------------
        $txt_import_csv_file             = New-Object system.Windows.Forms.TextBox
        $txt_import_csv_file.multiline   = $false
        $txt_import_csv_file.text        = "Import CSV:"
        $txt_import_csv_file.width       = 150
        $txt_import_csv_file.height      = 20
        $txt_import_csv_file.location    = New-Object System.Drawing.Point(20,80)
        $txt_import_csv_file.Font        = 'Courier New,10'
        $Form.Controls.Add($txt_import_csv_file)
    
    # -----------------------------------------------------------------------------------------
    # Add import-csv Label
    # -----------------------------------------------------------------------------------------
        $lbl_import_csv                  = New-Object system.Windows.Forms.Label
        $lbl_import_csv.text             = $DateiPFad
        $lbl_import_csv.BackColor        = "#ffffff"
        $lbl_import_csv.AutoSize         = $false
        $lbl_import_csv.width            = 300
        $lbl_import_csv.height           = 20
        $lbl_import_csv.location         = New-Object System.Drawing.Point(200,80)
        $lbl_import_csv.Font             = 'Courier New,10'
        $Form.Controls.Add($lbl_import_csv)
    
    
    # -----------------------------------------------------------------------------------------
    # Add import-csv Button
    # -----------------------------------------------------------------------------------------
        $but_import_csv                  = New-Object system.Windows.Forms.Button
        $but_import_csv.BackColor        = "#ffffff"
        $but_import_csv.text             = "Select"
        $but_import_csv.width            = 80
        $but_import_csv.height           = 20
        $but_import_csv.location         = New-Object System.Drawing.Point(530,80)
        $but_import_csv.Font             = 'Courier New,10,style=Bold,Underline'
        $but_import_csv.ForeColor        = "#000000"
        $Form.Controls.Add($but_import_csv)
    
        $but_import_csv.add_MouseClick({$txt_import_csv_file = fun_import_csv_path})
    
    
    # -----------------------------------------------------------------------------------------
    # Main
    # -----------------------------------------------------------------------------------------
    
             #Show the Form 
        $form.ShowDialog()| Out-Null 
    
     } #End Function 
    
    
    
     Generate-Form(fun_import_csv_path)

    Mittwoch, 19. Februar 2020 08:59
  • Hallo Martin

    Vielen Dank. Das ist genau das was ich brauche. Damit komme ich weiter. 

    Herzliche Grüße

    Jan

    Mittwoch, 19. Februar 2020 09:40
  • Du kannst auch am Anfang deines Scripts globale Variablen definieren, auf die du dann innerhalb jeder Funktion direkt zugreifen und verändern kannst:
    https://www.windowspro.de/script/gueltigkeitsbereich-scope-von-variablen-powershell

    Soit kannst du dann nach der Funktion ShowDialog das Ergebnis direkt der Forms-Variable zuweisen.

    Mittwoch, 19. Februar 2020 18:18