Website-Suche

Listenfelder mit mehreren Auswahlmöglichkeiten


Dieses Beispiel gilt nur für Windows-Plattformen.

Verwenden Sie Windows PowerShell 3.0 und spätere Versionen, um ein Listenfeld-Steuerelement mit Mehrfachauswahl in einem benutzerdefinierten Windows Form zu erstellen.

Erstellen Sie Listenfeld-Steuerelemente, die eine Mehrfachauswahl ermöglichen

Kopieren Sie Folgendes, fügen Sie es in Windows PowerShell ISE ein und speichern Sie es dann als PowerShell-Skriptdatei (.ps1).

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

$form = New-Object System.Windows.Forms.Form
$form.Text = 'Data Entry Form'
$form.Size = New-Object System.Drawing.Size(300,200)
$form.StartPosition = 'CenterScreen'

$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Point(75,120)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = 'OK'
$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $OKButton
$form.Controls.Add($OKButton)

$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Point(150,120)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = 'Cancel'
$CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $CancelButton
$form.Controls.Add($CancelButton)

$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20)
$label.Size = New-Object System.Drawing.Size(280,20)
$label.Text = 'Please make a selection from the list below:'
$form.Controls.Add($label)

$listBox = New-Object System.Windows.Forms.Listbox
$listBox.Location = New-Object System.Drawing.Point(10,40)
$listBox.Size = New-Object System.Drawing.Size(260,20)

$listBox.SelectionMode = 'MultiExtended'

[void] $listBox.Items.Add('Item 1')
[void] $listBox.Items.Add('Item 2')
[void] $listBox.Items.Add('Item 3')
[void] $listBox.Items.Add('Item 4')
[void] $listBox.Items.Add('Item 5')

$listBox.Height = 70
$form.Controls.Add($listBox)
$form.Topmost = $true

$result = $form.ShowDialog()

if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
    $x = $listBox.SelectedItems
    $x
}

Das Skript beginnt mit dem Laden von zwei .NET Framework-Klassen: System.Drawing und System.Windows.Forms. Anschließend starten Sie eine neue Instanz der .NET Framework-Klasse System.Windows.Forms.Form. Dadurch wird ein leeres Formular oder Fenster bereitgestellt, zu dem Sie mit dem Hinzufügen von Steuerelementen beginnen können.

$form = New-Object System.Windows.Forms.Form

Nachdem Sie eine Instanz der Form-Klasse erstellt haben, weisen Sie drei Eigenschaften dieser Klasse Werte zu.

  • Text. Dies wird zum Titel des Fensters.
  • Größe. Dies ist die Größe des Formulars in Pixel. Das vorangehende Skript erstellt ein Formular mit einer Breite von 300 Pixeln und einer Höhe von 200 Pixeln.
  • StartingPosition. Diese optionale Eigenschaft ist im vorherigen Skript auf CenterScreen gesetzt. Wenn Sie diese Eigenschaft nicht hinzufügen, wählt Windows beim Öffnen des Formulars einen Speicherort aus. Wenn Sie die StartingPosition auf CenterScreen setzen, wird das Formular bei jedem Laden automatisch in der Mitte des Bildschirms angezeigt.
$form.Text = 'Data Entry Form'
$form.Size = New-Object System.Drawing.Size(300,200)
$form.StartPosition = 'CenterScreen'

Erstellen Sie als Nächstes eine Schaltfläche OK für Ihr Formular. Geben Sie die Größe und das Verhalten der Schaltfläche OK an. In diesem Beispiel beträgt die Position der Schaltfläche 120 Pixel vom oberen Rand des Formulars und 75 Pixel vom linken Rand. Die Schaltflächenhöhe beträgt 23 Pixel, während die Schaltflächenlänge 75 Pixel beträgt. Das Skript verwendet vordefinierte Windows Forms-Typen, um das Schaltflächenverhalten zu bestimmen.

$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(75,120)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = 'OK'
$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $OKButton
$form.Controls.Add($OKButton)

Auf ähnliche Weise erstellen Sie eine Schaltfläche Abbrechen. Die Schaltfläche Abbrechen befindet sich 120 Pixel vom oberen Rand, aber 150 Pixel vom linken Rand des Fensters entfernt.

$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Point(150,120)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = 'Cancel'
$CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $CancelButton
$form.Controls.Add($CancelButton)

Geben Sie als Nächstes einen Beschriftungstext in Ihr Fenster ein, der die Informationen beschreibt, die Benutzer bereitstellen sollen.

$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20)
$label.Size = New-Object System.Drawing.Size(280,20)
$label.Text = 'Please make a selection from the list below:'
$form.Controls.Add($label)

Fügen Sie das Steuerelement (in diesem Fall ein Listenfeld) hinzu, mit dem Benutzer die Informationen angeben können, die Sie in Ihrem Etikettentext beschrieben haben. Neben Textfeldern können Sie noch viele andere Steuerelemente anwenden. Weitere Steuerelemente finden Sie unter System.Windows.Forms-Namespace.

$listBox = New-Object System.Windows.Forms.Listbox
$listBox.Location = New-Object System.Drawing.Point(10,40)
$listBox.Size = New-Object System.Drawing.Size(260,20)

So geben Sie an, dass Benutzer mehrere Werte aus der Liste auswählen können.

$listBox.SelectionMode = 'MultiExtended'

Im nächsten Abschnitt geben Sie die Werte an, die das Listenfeld den Benutzern anzeigen soll.

[void] $listBox.Items.Add('Item 1')
[void] $listBox.Items.Add('Item 2')
[void] $listBox.Items.Add('Item 3')
[void] $listBox.Items.Add('Item 4')
[void] $listBox.Items.Add('Item 5')

Geben Sie die maximale Höhe des Listenfeld-Steuerelements an.

$listBox.Height = 70

Fügen Sie das Listenfeld-Steuerelement zu Ihrem Formular hinzu und weisen Sie Windows an, das Formular beim Öffnen über anderen Fenstern und Dialogfeldern zu öffnen.

$form.Controls.Add($listBox)
$form.Topmost = $true

Fügen Sie die folgende Codezeile hinzu, um das Formular in Windows anzuzeigen.

$result = $form.ShowDialog()

Schließlich weist der Code im if-Block Windows an, was mit dem Formular geschehen soll, nachdem Benutzer eine oder mehrere Optionen aus dem Listenfeld ausgewählt und dann auf die Schaltfläche OK geklickt oder gedrückt haben die Enter-Taste.

if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
    $x = $listBox.SelectedItems
    $x
}

Siehe auch

  • Weekend Scripter: PowerShell-GUI-Beispiele reparieren
  • GitHub: Dave Wyatts WinFormsExampleUpdates
  • Windows PowerShell-Tipp der Woche: Listenfelder mit Mehrfachauswahl - und mehr!)

Verwandte Artikel