Function Main
{
$Laufwerke = LaufwerkeFinden

Gui $Laufwerke

#Write-Host "Dateityp nach Übergabe: " $Pfad.GetType()
#Write-Host "Datei ausgewählt mit dem Verzeichnis " $Pfad
}


Function Gui ($Laufwerke)
{
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")

# Eigenschaften Fenster
$Fenster = New-Object System.Windows.Forms.Form
$Fenster.Text = "Laufwerke"
$Fenster.Size = New-Object System.Drawing.Size(900,600) #Breite, Höhe
$Fenster.StartPosition = "CenterScreen"
$Fenster.KeyPreview = $true # was macht das?
$Fenster.MaximumSize = $Fenster.Size # legt fest, dass Größe des Fensters nicht verändert werden kann
$Fenster.MinimumSize = $Fenster.Size

# PfadFeld
$PfadFeld = New-Object System.Windows.Forms.TextBox
$PfadFeld.Location = New-Object System.Drawing.Size(10,10)
$PfadFeld.Size = New-Object System.Drawing.Size(860,20)
#$PfadFeld.Text = $Pfad #Bringt nur etwas, wenn $Pfad einen Anfangswert hat, da der Text nicht laufend aktualisiert wird
$Fenster.Controls.Add($PfadFeld)

# ListeOrdnernamen
$ListeOrdnernamen = New-Object System.Windows.Forms.ListBox
$ListeOrdnernamen.Location = New-Object System.Drawing.Size(10,40)
$ListeOrdnernamen.Size = New-Object System.Drawing.Size(860,20)
$ListeOrdnernamen.Height = 450
$ListeOrdnernamen.Font = New-Object System.Drawing.Font("Arial",12,[System.Drawing.FontStyle]::Regular)
foreach ($Laufwerk in $Laufwerke)
{
    $ListeOrdnernamen.Items.Add($Laufwerk)
}
<#for ($i = 0; $i -lt 100; $i++)
{
    $ListeOrdnernamen.Items.Add("Wert$i")
}#>
$Fenster.Controls.Add($ListeOrdnernamen)

<#
# Beispiel Textfeld
$Textfeld1 = New-Object System.Windows.Forms.Label
$Textfeld1.Location = New-Object System.Drawing.Size(7,500)
$Textfeld1.Size = New-Object System.Drawing.Size(130,15)
$Textfeld1.Text = "Beispiel Text"
$Fenster.Controls.Add($Textfeld1)
#>


# AuswählenButton
$AuswählenButton = New-Object System.Windows.Forms.Button
$AuswählenButton.Location = New-Object System.Drawing.Size(750,500)
$AuswählenButton.Size = New-Object System.Drawing.Size(100,30)
$AuswählenButton.Text = "Auswählen"
$AuswählenButton.Add_MouseClick({
    # Aktion bei Klick
    $Auswahl = $ListeOrdnernamen.SelectedItem
    Write-Host "Gewählter Ordner/ Datei: " $Auswahl
    $Pfad = $PfadFeld.Text
    Write-Host "Vorheriger Pfad: " $Pfad
    if ($Pfad.length -gt 0)
    {
        $Pfad = Join-Path -Path $Pfad -ChildPath $Auswahl -Resolve
    }
    else
    {
        $Pfad = $Auswahl
    }
    Write-Host "Neuer Pfad: " $Pfad

    #Erkennen, ob *.txt-Datei gewählt wurde -> ggf. return
    if ($($Auswahl -match ".txt"))
    {
        Write-Host ".txt-Datei ausgewählt, Pfad: " $Pfad
        Write-Host "Dateityp: " $Pfad.GetType()
        $Fenster.Dispose()
        $Holder = NachAuswahl $Pfad
        #return $Pfad[0]
    }

    $PfadFeld.Text = $Pfad
    $Fenster.Text = $Auswahl
    $ListeOrdnernamen.Items.Clear()
    Write-Host "Pfadwert vor Übergabe: " $Pfad
    $Unterorder = UnterOrdnerFinden $Pfad
    $TxtDateien = TxtDateienFinden $Pfad
    $Optionen = Optionen $Unterorder $TxtDateien
    foreach ($Option in $Optionen)
    {
        # Write-Host "Option: " $Option
        if ($Option.length -gt 0)
        {
            $ListeOrdnernamen.Items.Add($Option)
        }
    }
})
$Fenster.Controls.Add($AuswählenButton)

# ZurückButton
$ZurückButton = New-Object System.Windows.Forms.Button
$ZurückButton.Location = New-Object System.Drawing.Size(10,500)
$ZurückButton.Size = New-Object System.Drawing.Size(100,30)
$ZurückButton.Text = "Zurück"
$ZurückButton.Add_MouseClick({
    Write-Host "Pfad ausgabe: " $PfadFeld.Text
    $Pfad = $PfadFeld.Text
    if ($Pfad.Length -gt 3)
    {
        # Weiter mit Ordnern/Dateien
        Write-Host "Ordner/ Dateien anzeigen"
        $Pfad = Split-Path $Pfad
        Write-Host "Neuer Pfad: " $Pfad
        $PfadFeld.Text = $Pfad
        $Fenster.Text = $(Split-Path $Pfad)
        $ListeOrdnernamen.Items.Clear()
        Write-Host "Pfadwert vor Übergabe: " $Pfad
        $Unterorder = UnterOrdnerFinden $Pfad
        $TxtDateien = TxtDateienFinden $Pfad
        $Optionen = Optionen $Unterorder $TxtDateien
        foreach ($Option in $Optionen)
        {
            # Write-Host "Option: " $Option
            if ($Option.length -gt 0)
            {
                $ListeOrdnernamen.Items.Add($Option)
            }
        }
    }
    elseif ($Pfad.Length -le 3)
    {
        # Weiter mit Laufwerken
        Write-Host "Laufwerke anzeigen"
        $Pfad = Split-Path $Pfad
        Write-Host "Neuer Pfad: " $Pfad
        $PfadFeld.Text = $Pfad
        $Fenster.Text = "Laufwerke"
        $ListeOrdnernamen.Items.Clear()
        Write-Host "Pfadwert vor Übergabe: " $Pfad
        $Laufwerke = LaufwerkeFinden $Pfad
        foreach ($Laufwerk in $Laufwerke)
        {
            # Write-Host "Option: " $Option
            if ($Laufwerk.length -gt 0)
            {
                $ListeOrdnernamen.Items.Add($Laufwerk)
            }
        }

    }
    else
    {
        # Fehler/ Nichts tun?
    }
})
$Fenster.Controls.Add($ZurückButton)


$Fenster.Add_Shown({$Fenster.Activate()})
[void] $Fenster.ShowDialog()
}

Function NachAuswahl ($Pfad)
{
Write-Host "Name in Funktion: " $Pfad

Exit
}

Function UnterOrdnerFinden($Pfad)
{
#abfangen: keine Ordner vorhanden -> nicht nötig, da keine weitere Verarbeitung
$Ordner = $(Get-Childitem $Pfad -Directory)
return $Ordner
}

Function LaufwerkeFinden()
{
$Laufwerke = $(Get-PSDrive | where {$_.Free}).Name
$i = 0

foreach($Laufwerk in $Laufwerke)
{
    $Laufwerke[$i] =  $Laufwerk + ":\"
    $i++
}

return $Laufwerke
}

Function TxtDateienFinden($Pfad)
{
$TxtDateien = $(Get-Childitem $Pfad\*.txt)

if ($TxtDateien.Length -gt 0)
{
    return $(Split-Path $TxtDateien -Leaf)
}
else
{
    return
}
}

Function Optionen([System.Object[]]$UnterOrdner, $TxtDateien)
{
#Gibt aktuell auch Index und Typ (System.IO.DirectoryInfo bzw. System.String) zurück
$Optionen = $UnterOrdner + $TxtDateien

return $Optionen
}


Main

<#
$mailAddresses = ("sdasd@ddfsf.net","ououoizu@fdssd.com","ssdfdsfds@dsfds.org")

function FnShowDialog {
	[void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
	 #~~< Form1 >~~~~~~~~~~~~~~~~~~~~~~~~~~
	$Form1 = New-Object System.Windows.Forms.Form
	$Form1.ClientSize = "347, 86"
	$Form1.Font = New-Object System.Drawing.Font("Microsoft Sans Serif", 9.75, [System.Drawing.FontStyle]::Regular, [System.Drawing.GraphicsUnit]::Point, ([System.Byte](0)))
	$Form1.FormBorderStyle = "FixedToolWindow"
	$Form1.MaximizeBox = $false
	$Form1.MinimizeBox = $false
	$Form1.BackColor = "White"
	#~~< Label1 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
	$Label1 = New-Object System.Windows.Forms.Label
	$Label1.Location = "13, 13"
	$Label1.Size = "217, 23"
	$Label1.Text = "Bitte Mailadresse wählen:"
	#~~< Button1 >~~~~~~~~~~~~~~~~~~~~~~~~~ 
	$Button1 = New-Object System.Windows.Forms.Button
	$Button1.Location = "259, 41"
	$Button1.Size = "76, 26"
	$Button1.Text = "OK"
	$Button1.add_MouseClick({
		$script:selectedMailAdr = $ComboBox1.SelectedItem
		$Form1.dispose()
	})
	#~~< ComboBox1 >~~~~~~~~~~~~~~~~~~~~~~~~~~ 
	$ComboBox1 = New-Object System.Windows.Forms.ComboBox
	$ComboBox1.Location = "12, 40"
	$ComboBox1.SelectedIndex = -1
	$ComboBox1.DropDownStyle = "DropDownList"
	$ComboBox1.Size = "231, 24"
	$ComboBox1.Items.AddRange($mailAddresses)
	
	$Form1.Controls.Add($Label1)
	$Form1.Controls.Add($Button1)
	$Form1.Controls.Add($ComboBox1)
	[System.Windows.Forms.Application]::Run($Form1)
}


FnShowDialog
Write-Host $selectedMailAdr
#>