Selecionar itens numa caixa de listagem

Este exemplo só se aplica a plataformas Windows.

Use o Windows PowerShell 3.0 e versões posteriores para criar uma caixa de diálogo que permite aos usuários selecionar itens de um controle de caixa de listagem.

Criar um controle de caixa de listagem e selecionar itens dele

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 = '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
}

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.

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

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

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. Nesse caso, você deseja que os usuários selecionem um computador.

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

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 das caixas de listagem; 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)
$listBox.Height = 80

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

Nota

A caixa de listagem criada por este script permite apenas uma seleção. Para criar um controle de caixa de listagem que permita várias seleções, especifique um valor para a propriedade SelectionMode, da mesma forma que a seguinte: $listBox.SelectionMode = 'MultiExtended'. Para obter mais informações, consulte Caixas de listagem de seleção múltipla.

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

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 If instrui o Windows sobre o que fazer com o formulário depois que os usuários selecionam uma opção 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.SelectedItem
    $x
}

Consulte também