Seznamy s vícenásobným výběrem

Tato ukázka se vztahuje pouze na platformy Windows.

Pomocí Windows PowerShell 3.0 a novějších verzí můžete ve vlastním formuláři Windows Form vytvořit ovládací prvek se seznamem s vícenásobným výběrem.

Vytvoření ovládacích prvků seznamu, které umožňují více výběrů

Zkopírujte a vložte následující kód do Windows PowerShell ISE a pak ho uložte jako soubor skriptu PowerShellu (.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
}

Skript začíná načtením dvou tříd rozhraní .NET Framework: System.Drawing a System.Windows.Forms. Poté spustíte novou instanci třídy rozhraní .NET Framework System.Windows.Forms.Form. Tím získáte prázdný formulář nebo okno, do kterého můžete začít přidávat ovládací prvky.

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

Po vytvoření instance třídy Form přiřaďte hodnoty třem vlastnostem této třídy.

  • Text. Tím se stane název okna.
  • Velikost. Jedná se o velikost formuláře v pixelech. Předchozí skript vytvoří formulář, který má šířku 300 pixelů a výšku 200 pixelů.
  • Počáteční pozice. Tato volitelná vlastnost je v předchozím skriptu nastavená na hodnotu CenterScreen . Pokud tuto vlastnost nepřidáte, systém Windows při otevření formuláře vybere umístění. Nastavením počáteční pozice na hodnotu CenterScreen automaticky zobrazíte formulář uprostřed obrazovky při každém načtení.
$form.Text = 'Data Entry Form'
$form.Size = New-Object System.Drawing.Size(300,200)
$form.StartPosition = 'CenterScreen'

Potom vytvořte tlačítko OK pro formulář. Zadejte velikost a chování tlačítka OK . V tomto příkladu je pozice tlačítka 120 pixelů od horního okraje formuláře a 75 pixelů od levého okraje. Výška tlačítka je 23 pixelů, zatímco délka tlačítka je 75 pixelů. Skript používá k určení chování tlačítek předdefinované typy model Windows Forms.

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

Podobně vytvoříte tlačítko Zrušit . Tlačítko Zrušit je 120 pixelů od horního okraje, ale 150 pixelů od levého okraje 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)

Dále do okna zadejte text popisku, který popisuje informace, které mají uživatelé poskytnout.

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

Přidejte ovládací prvek (v tomto případě seznam), který uživatelům umožní zadat informace, které jste popsali v textu štítku. Existuje mnoho dalších ovládacích prvků, které můžete použít kromě textových polí; Další ovládací prvky najdete v tématu Obor názvů 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)

Takto určíte, že chcete uživatelům povolit výběr více hodnot ze seznamu.

$listBox.SelectionMode = 'MultiExtended'

V další části zadáte hodnoty, které má seznam zobrazovat uživatelům.

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

Zadejte maximální výšku ovládacího prvku seznam.

$listBox.Height = 70

Přidejte do formuláře ovládací prvek Seznam a dejte systému Windows pokyn, aby při otevření otevřel formulář na ostatních oknech a dialogových oknech.

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

Přidejte následující řádek kódu pro zobrazení formuláře ve Windows.

$result = $form.ShowDialog()

Nakonec kód uvnitř if bloku instruuje systém Windows, co má s formulářem dělat poté, co uživatelé vyberou jednu nebo více možností ze seznamu a potom kliknou na tlačítko OK nebo stiskněte klávesu Enter .

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

Viz také