Dela via


Listrutor med flera val

Det här exemplet gäller endast för Windows-plattformar.

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

Skapa listrutekontroller som tillåter flera val

Kopiera och klistra sedan in följande i Windows PowerShell ISE och spara det sedan som en PowerShell-skriptfil (.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 två .NET Framework-klasser: System.Drawing och System.Windows.Forms. Sedan startar du en ny instans av .NET Framework-klassen System.Windows.Forms.Form. Det ger 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 Formulär tilldelar du värden till tre egenskaper för den här klassen.

  • Text. Detta blir fönstrets rubrik.
  • Storlek. Det här är storleken på formuläret 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 egenskapen väljer Windows en plats när formuläret öppnas. Genom att ange StartingPosition till CenterScreen visar du automatiskt formuläret mitt på 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 OK-knappen . 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 tillhandahålla.

$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) som låter användarna 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.Forms Namnområde.

$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 tillåta användare att 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 listrutekontrollen.

$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 if blocket 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-knappen eller trycker på Retur .

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

Se även