Keuzelijst met meerdere selecties

Gebruik Windows PowerShell 3.0 en latere releases om een besturingselement voor keuzelijst met meerdere selecties 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 vervolgens op als Windows PowerShell script (.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. Formulieren. Vervolgens start u een nieuw exemplaar van de .NET Framework klasse System.Windows. Forms.Form; dat een leeg formulier of venster bevat waaraan u besturingselementen kunt toevoegen.

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

Nadat u een exemplaar van de klasse Form hebt maken, 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. Met het voorgaande script maakt u een formulier van 300 pixels breed bij 200 pixels lang.

  • StartingPosition. Deze optionele eigenschap wordt in het voorgaande script ingesteld op CenterScreen. Als u deze eigenschap niet toevoegt, selecteert Windows een locatie wanneer het formulier wordt geopend. Door StartingPosition in te stellen op CenterScreen, wordt het formulier automatisch weergegeven in het midden van het scherm 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 positie van de knop 120 pixels van de bovenrand van het formulier en 75 pixels vanaf de linkerrand. De hoogte van de knop is 23 pixels, terwijl de lengte van de knop 75 pixels is. Het script maakt gebruik van vooraf gedefinieerde Windows formuliertypen 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 met de informatie die gebruikers moeten verstrekken.

$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 lijstvak) toe waarmee gebruikers de informatie kunnen verstrekken die u in uw labeltekst hebt beschreven. Er zijn veel andere besturingselementen die u naast tekstvakken kunt toepassen; Zie System.Windows voor meer besturingselementen. Formuliernaamruimte.

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

Hier ziet u hoe u opgeeft dat u wilt toestaan dat gebruikers meerdere waarden in de lijst selecteren.

$listBox.SelectionMode = 'MultiExtended'

In de volgende sectie geeft u de waarden op die in het lijstvak moeten worden weergegeven 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 voor de lijst op.

$listBox.Height = 70

Voeg het besturingselement Voor de lijst toe aan uw formulier en instrueren Windows het formulier te openen op andere vensters en dialoogvensters wanneer het wordt geopend.

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

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

$result = $form.ShowDialog()

Ten slotte geeft de code in het blok Indien aan Windows wat er met het formulier moet worden gebeurd nadat gebruikers een of meer opties in het keuzelijstvak hebben geselecteerd en vervolgens op de knop OK klikken of op Enter drukken.

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

Zie ook