Listrutor med flera val

Använd Windows PowerShell version 3.0 och senare för att skapa en listrruta med flera val i ett anpassat Windows formulär.

Kontroller för att skapa listrutor som tillåter flera val

Kopiera och klistra in följande i Windows PowerShell ISE och spara det sedan som ett Windows PowerShell skript (.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
}

Skriptet börjar med att läsa in .NET Framework klasser: System.Drawing och System.Windows. Formulär. Sedan startar du en ny instans av .NET Framework klassen System.Windows. Forms.Form; som innehåller ett tomt formulär eller fönster där du kan börja lägga till kontroller.

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

När du har skapat en instans av klassen Form tilldelar du värden till tre egenskaper för den här klassen.

  • Text. Detta blir fönstrets rubrik.

  • Storlek. Det här är formulärets storlek i bildpunkter. Föregående skript skapar ett formulär som är 300 bildpunkter brett och 200 bildpunkter högt.

  • StartingPosition. Den här valfria egenskapen är inställd på CenterScreen i föregående skript. Om du inte lägger till den här Windows väljer en plats när formuläret öppnas. Genom att ange StartingPosition till CenterScreen visas formuläret automatiskt i mitten av skärmen varje gång det läses in.

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

Skapa sedan en OK-knapp för formuläret. Ange storlek och beteende för knappen OK. I det här exemplet är knapppositionen 120 bildpunkter från formulärets övre kant och 75 bildpunkter från den vänstra kanten. Knapphöjden är 23 bildpunkter, medan knapplängden är 75 bildpunkter. Skriptet använder fördefinierade Windows Forms-typer för att fastställa knappbeteenden.

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

På samma sätt skapar du en Avbryt-knapp. Knappen Avbryt är 120 bildpunkter uppifrån, men 150 bildpunkter från fönstrets vänstra kant.

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

Ange sedan etiketttext i fönstret som beskriver den information som du vill att användarna ska ange.

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

Lägg till kontrollen (i det här fallet en listruta) där användarna kan ange den information som du har beskrivit i etiketttexten. Det finns många andra kontroller som du kan använda förutom textrutor. Fler kontroller finns i System.Windows. Namnområde för formulär.

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

Så här anger du att du vill att användarna ska kunna välja flera värden i listan.

$listBox.SelectionMode = 'MultiExtended'

I nästa avsnitt anger du de värden som du vill att listrutan ska visa för användarna.

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

Ange den maximala höjden för listrrutorna.

$listBox.Height = 70

Lägg till listrutekontrollen i formuläret och instruera Windows att öppna formuläret ovanpå andra fönster och dialogrutor när det öppnas.

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

Lägg till följande kodrad för att visa formuläret i Windows.

$result = $form.ShowDialog()

Slutligen instruerar koden i blocket Om Windows vad du ska göra med formuläret när användarna har valt ett eller flera alternativ i listrutan och klickar sedan på OK eller trycker på Retur.

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

Se även