Keuzelijsten met meerdere keuzemogelijkheden

Dit voorbeeld is alleen van toepassing op Windows-platforms.

Gebruik Windows PowerShell 3.0 en hoger om een keuzelijstbesturingselement met meerdere keuzemogelijkheden te maken in een aangepast Windows-formulier.

Keuzelijstbesturingselementen maken die meerdere selecties toestaan

Kopieer en plak het volgende in Windows PowerShell ISE en sla het bestand op als een PowerShell-scriptbestand (.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
}

Het script begint met het laden van twee .NET Framework-klassen: System.Drawing en System.Windows.Forms. Vervolgens start u een nieuw exemplaar van de .NET Framework-klasse System.Windows.Forms.Form. Dit biedt een leeg formulier of venster waaraan u besturingselementen kunt toevoegen.

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

Nadat u een exemplaar van de formulierklasse hebt gemaakt, wijst u waarden toe aan drie eigenschappen van deze klasse.

  • Tekst. Dit wordt de titel van het venster.
  • Grootte. Dit is de grootte van het formulier, in pixels. Het voorgaande script maakt een formulier van 300 pixels breed met 200 pixels hoog.
  • StartingPosition. Deze optionele eigenschap is ingesteld op CenterScreen in het voorgaande script. Als u deze eigenschap niet toevoegt, selecteert Windows een locatie wanneer het formulier wordt geopend. Door de Startpositie in te stellen op CenterScreen, wordt het formulier automatisch in het midden van het scherm weergegeven telkens wanneer het wordt geladen.
$form.Text = 'Data Entry Form'
$form.Size = New-Object System.Drawing.Size(300,200)
$form.StartPosition = 'CenterScreen'

Maak vervolgens een knop OK voor uw formulier. Geef de grootte en het gedrag van de knop OK op. In dit voorbeeld is de knoppositie 120 pixels van de bovenrand van het formulier en 75 pixels vanaf de linkerrand. De knophoogte is 23 pixels, terwijl de knoplengte 75 pixels is. Het script maakt gebruik van vooraf gedefinieerde Typen Windows Forms om het gedrag van de knop te bepalen.

$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)

Op dezelfde manier maakt u een knop Annuleren . De knop Annuleren is 120 pixels vanaf de bovenkant, maar 150 pixels vanaf de linkerrand van het venster.

$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)

Geef vervolgens labeltekst op in het venster waarin de informatie wordt beschreven die gebruikers moeten opgeven.

$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)

Voeg het besturingselement (in dit geval een keuzelijst) toe waarmee gebruikers de informatie kunnen opgeven die u in de labeltekst hebt beschreven. Er zijn veel andere besturingselementen die u naast tekstvakken kunt toepassen; Zie System.Windows.Forms-naamruimte voor meer besturingselementen.

$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)

U geeft als volgt op dat u wilt dat gebruikers meerdere waarden in de lijst selecteren.

$listBox.SelectionMode = 'MultiExtended'

In de volgende sectie geeft u de waarden op die u in de keuzelijst wilt weergeven voor gebruikers.

[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')

Geef de maximale hoogte van het besturingselement keuzelijst op.

$listBox.Height = 70

Voeg het besturingselement keuzelijst toe aan uw formulier en geef Windows opdracht om het formulier boven andere vensters en dialoogvensters te openen wanneer het wordt geopend.

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

Voeg de volgende regel code toe om het formulier weer te geven in Windows.

$result = $form.ShowDialog()

Ten slotte geeft de code in het if blok Windows opdracht wat er met het formulier moet worden gedaan nadat gebruikers een of meer opties in de keuzelijst hebben geselecteerd en klik vervolgens op de knop OK of druk op Enter .

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

Zie ook