Pola listy wielokrotnego wyboru

Ten przykład dotyczy tylko platform systemu Windows.

Użyj programu Windows PowerShell 3.0 i nowszych wersji, aby utworzyć kontrolkę pola listy wielokrotnego wyboru w niestandardowym formularzu systemu Windows.

Tworzenie kontrolek pól listy, które zezwalają na wiele wyborów

Skopiuj i wklej następujący kod do środowiska Windows PowerShell ISE, a następnie zapisz go jako plik skryptu programu PowerShell (.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
}

Skrypt rozpoczyna się od załadowania dwóch klas programu .NET Framework: System.Drawing i System.Windows.Forms. Następnie uruchom nowe wystąpienie klasy .NET Framework System.Windows.Forms.Form. Zapewnia to pusty formularz lub okno, do którego można rozpocząć dodawanie kontrolek.

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

Po utworzeniu wystąpienia klasy Form przypisz wartości do trzech właściwości tej klasy.

  • Tekst. Staje się to tytułem okna.
  • Rozmiar. Jest to rozmiar formularza w pikselach. Powyższy skrypt tworzy formularz o szerokości 300 pikseli o wysokości 200 pikseli.
  • Pozycja początkowa. Ta opcjonalna właściwość jest ustawiona na Wartość CenterScreen w poprzednim skrygcie. Jeśli ta właściwość nie zostanie dodana, system Windows wybierze lokalizację po otwarciu formularza. Ustawiając ekran StartPosition na CenterScreen, automatycznie wyświetlasz formularz na środku ekranu za każdym razem, gdy zostanie załadowany.
$form.Text = 'Data Entry Form'
$form.Size = New-Object System.Drawing.Size(300,200)
$form.StartPosition = 'CenterScreen'

Następnie utwórz przycisk OK dla formularza. Określ rozmiar i zachowanie przycisku OK . W tym przykładzie położenie przycisku wynosi 120 pikseli od górnej krawędzi formularza i 75 pikseli od lewej krawędzi. Wysokość przycisku wynosi 23 piksele, a długość przycisku wynosi 75 pikseli. Skrypt używa wstępnie zdefiniowanych typów formularzy systemu Windows do określania zachowań przycisków.

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

Podobnie utworzysz przycisk Anuluj . Przycisk Anuluj jest 120 pikseli od góry, ale 150 pikseli od lewej krawędzi okna.

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

Następnie podaj tekst etykiety w oknie, który opisuje informacje, które mają zostać podane przez użytkowników.

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

Dodaj kontrolkę (w tym przypadku pole listy), które umożliwia użytkownikom podanie informacji opisanych w tekście etykiety. Istnieje wiele innych kontrolek, które można zastosować oprócz pól tekstowych; aby uzyskać więcej kontrolek, zobacz System.Windows.Forms Namespace (Przestrzeń nazw System.Windows.Forms).

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

Poniżej przedstawiono sposób określania, że chcesz zezwolić użytkownikom na wybieranie wielu wartości z listy.

$listBox.SelectionMode = 'MultiExtended'

W następnej sekcji określisz wartości, które mają być wyświetlane użytkownikom w polu listy.

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

Określ maksymalną wysokość kontrolki pola listy.

$listBox.Height = 70

Dodaj kontrolkę pola listy do formularza i poinstruuj system Windows, aby otwierał formularz na szczycie innych okien i okien dialogowych po jego otwarciu.

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

Dodaj następujący wiersz kodu, aby wyświetlić formularz w systemie Windows.

$result = $form.ShowDialog()

Na koniec kod wewnątrz if bloku instruuje systemOwi Windows, co zrobić z formularzem po wybraniu przez użytkowników co najmniej jednej opcji w polu listy, a następnie kliknij przycisk OK lub naciśnij klawisz Enter .

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

Zobacz też