Caixas de listagem de seleção múltipla

Este exemplo só se aplica a plataformas Windows.

Use o Windows PowerShell 3.0 e versões posteriores para criar um controle de caixa de listagem de seleção múltipla em um Windows Form personalizado.

Criar controles de caixa de listagem que permitem várias seleções

Copie e cole o seguinte no Windows PowerShell ISE e salve-o como um arquivo de script (.ps1) do PowerShell.

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
}

O script começa carregando duas classes do .NET Framework: System.Drawing e System.Windows.Forms. Em seguida, inicie uma nova instância da classe do .NET Framework System.Windows.Forms.Form. Isso fornece um formulário em branco ou uma janela à qual você pode começar a adicionar controles.

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

Depois de criar uma instância da classe Form, atribua valores a três propriedades dessa classe.

  • Texto. Este torna-se o título da janela.
  • Tamanho. Este é o tamanho do formulário, em pixels. O script anterior cria um formulário com 300 pixels de largura por 200 pixels de altura.
  • StartingPosition. Esta propriedade opcional é definida como CenterScreen no script anterior. Se você não adicionar essa propriedade, o Windows selecionará um local quando o formulário for aberto. Ao definir StartingPosition como CenterScreen, você está exibindo automaticamente o formulário no meio da tela cada vez que ele é carregado.
$form.Text = 'Data Entry Form'
$form.Size = New-Object System.Drawing.Size(300,200)
$form.StartPosition = 'CenterScreen'

Em seguida, crie um botão OK para o formulário. Especifique o tamanho e o comportamento do botão OK . Neste exemplo, a posição do botão é de 120 pixels da borda superior do formulário e 75 pixels da borda esquerda. A altura do botão é de 23 pixels, enquanto o comprimento do botão é de 75 pixels. O script usa tipos predefinidos do Windows Forms para determinar os comportamentos dos botões.

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

Da mesma forma, você cria um botão Cancelar . O botão Cancelar está a 120 pixels da parte superior, mas a 150 pixels da borda esquerda da janela.

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

Em seguida, forneça um texto de rótulo na janela que descreva as informações que você deseja que os usuários forneçam.

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

Adicione o controle (neste caso, uma caixa de listagem) que permite que os usuários forneçam as informações descritas no texto do rótulo. Há muitos outros controles que você pode aplicar além de caixas de texto; para obter mais controles, consulte System.Windows.Forms Namespace.

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

Veja como você especifica que deseja permitir que os usuários selecionem vários valores da lista.

$listBox.SelectionMode = 'MultiExtended'

Na próxima seção, especifique os valores que deseja que a caixa de listagem exiba aos usuários.

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

Especifique a altura máxima do controle de caixa de listagem.

$listBox.Height = 70

Adicione o controle de caixa de listagem ao formulário e instrua o Windows a abri-lo em outras janelas e caixas de diálogo quando ele for aberto.

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

Adicione a seguinte linha de código para exibir o formulário no Windows.

$result = $form.ShowDialog()

Finalmente, o código dentro do bloco instrui o if Windows sobre o que fazer com o formulário depois que os usuários selecionam uma ou mais opções na caixa de listagem e, em seguida, clique no botão OK ou pressione a tecla Enter.

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

Consulte também