Wybieranie elementów w polu listy

Ten przykład dotyczy tylko platform systemu Windows.

Użyj programu Windows PowerShell 3.0 i nowszych wersji, aby utworzyć okno dialogowe umożliwiające użytkownikom wybieranie elementów z kontrolki pola listy.

Tworzenie kontrolki pola listy i wybieranie z niej elementó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 = 'Select a Computer'
$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 select a computer:'
$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.Height = 80

[void] $listBox.Items.Add('atl-dc-001')
[void] $listBox.Items.Add('atl-dc-002')
[void] $listBox.Items.Add('atl-dc-003')
[void] $listBox.Items.Add('atl-dc-004')
[void] $listBox.Items.Add('atl-dc-005')
[void] $listBox.Items.Add('atl-dc-006')
[void] $listBox.Items.Add('atl-dc-007')

$form.Controls.Add($listBox)

$form.Topmost = $true

$result = $form.ShowDialog()

if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
    $x = $listBox.SelectedItem
    $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.

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

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 = 'Select a Computer'
$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.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)

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. W takim przypadku chcesz, aby użytkownicy wybrali komputer.

$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 select a computer:'
$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 listy; 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)
$listBox.Height = 80

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

Uwaga

Pole listy utworzone przez ten skrypt umożliwia tylko jedno zaznaczenie. Aby utworzyć kontrolkę pola listy, która zezwala na wiele wyborów, określ wartość właściwości SelectionMode , podobnie jak w przypadku następujących elementów: $listBox.SelectionMode = 'MultiExtended'. Aby uzyskać więcej informacji, zobacz Pola listy wielokrotnego wyboru.

[void] $listBox.Items.Add('atl-dc-001')
[void] $listBox.Items.Add('atl-dc-002')
[void] $listBox.Items.Add('atl-dc-003')
[void] $listBox.Items.Add('atl-dc-004')
[void] $listBox.Items.Add('atl-dc-005')
[void] $listBox.Items.Add('atl-dc-006')
[void] $listBox.Items.Add('atl-dc-007')

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 bloku Jeśli nakazuje systemowi Windows, co zrobić z formularzem po wybraniu przez użytkowników opcji z listy, a następnie kliknij przycisk OK lub naciśnij klawisz Enter.

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

Zobacz też